fn qsort<T: Copy + PartialOrd>(slice: &mut [T]) {
_qsort(slice, 0, slice.len())
}
fn _qsort<T: Copy + PartialOrd>(slice: &mut [T], b: usize, e: usize) {
if (e - b) < 2 {return}
let (c, mut i, mut j) = (slice[(b + e) / 2], b, e - 1);
loop {
while slice[i] < c {i += 1}
while c < slice[j] {j -= 1}
if j <= i {break;}
slice.swap(i, j);
i += 1;j -= 1;
}
_qsort(slice, b, i);
_qsort(slice, i, e);
}
fn main() {
let mut v: Vec<i32> = vec![4, 8, 8, 3];
println!("{:?}", v);
println!("{:?}", v);
}
Zm4gcXNvcnQ8VDogQ29weSArIFBhcnRpYWxPcmQ+KHNsaWNlOiAmbXV0IFtUXSkgewoJX3Fzb3J0KHNsaWNlLCAwLCBzbGljZS5sZW4oKSkKfQpmbiBfcXNvcnQ8VDogQ29weSArIFBhcnRpYWxPcmQ+KHNsaWNlOiAmbXV0IFtUXSwgYjogdXNpemUsIGU6IHVzaXplKSB7CglpZiAoZSAtIGIpIDwgMiB7cmV0dXJufQoJbGV0IChjLCBtdXQgaSwgbXV0IGopID0gKHNsaWNlWyhiICsgZSkgLyAyXSwgYiwgZSAtIDEpOwoJbG9vcCB7CgkJd2hpbGUgc2xpY2VbaV0gPCBjIHtpICs9IDF9CgkJd2hpbGUgYyA8IHNsaWNlW2pdIHtqIC09IDF9CgkJaWYgaiA8PSBpIHticmVhazt9CgkJc2xpY2Uuc3dhcChpLCBqKTsKCQlpICs9IDE7aiAtPSAxOwoJfQoJX3Fzb3J0KHNsaWNlLCBiLCBpKTsKCV9xc29ydChzbGljZSwgaSwgZSk7Cn0KZm4gbWFpbigpIHsKCWxldCBtdXQgdjogVmVjPGkzMj4gPSB2ZWMhWzQsIDgsIDgsIDNdOwoJcHJpbnRsbiEoIns6P30iLCB2KTsKCXFzb3J0KCZtdXQgdik7CglwcmludGxuISgiezo/fSIsIHYpOwp9Cg==