fork download
  1. fn qsort<T: Copy + PartialOrd>(slice: &mut [T]) {
  2. _qsort(slice, 0, slice.len())
  3. }
  4. fn _qsort<T: Copy + PartialOrd>(slice: &mut [T], b: usize, e: usize) {
  5. if (e - b) < 2 {return}
  6. let (c, mut i, mut j) = (slice[(b + e) / 2], b, e - 1);
  7. loop {
  8. while slice[i] < c {i += 1}
  9. while c < slice[j] {j -= 1}
  10. if j <= i {break;}
  11. slice.swap(i, j);
  12. i += 1;j -= 1;
  13. }
  14. _qsort(slice, b, i);
  15. _qsort(slice, i, e);
  16. }
  17. fn main() {
  18. let mut v: Vec<i32> = vec![4, 8, 8, 3];
  19. println!("{:?}", v);
  20. qsort(&mut v);
  21. println!("{:?}", v);
  22. }
  23.  
Success #stdin #stdout 0.01s 5476KB
stdin
Standard input is empty
stdout
[4, 8, 8, 3]
[3, 4, 8, 8]