fork(1) download
  1. fn main() {
  2. let mut input: Vec<_> = (1..10_000_000).rev().collect();
  3. let result = {
  4. sort_imp(&mut input);
  5. input
  6. };
  7. //println!("{:?}", result);
  8. }
  9.  
  10. fn sort_imp<T: Ord + Copy>(arr: &mut Vec<T>) {
  11. fn swap<T: Ord + Copy>(arr: &mut Vec<T>, i: usize, j: usize) {
  12. let t = arr[i];
  13. arr[i] = arr[j];
  14. arr[j] = t;
  15. }
  16.  
  17. fn sort1<T: Ord + Copy>(arr: &mut Vec<T>, l: usize, r: usize) {
  18. let pivot = arr[(l + r) / 2];
  19. let mut i = l;
  20. let mut j = r;
  21. if r-l < 2 {
  22. return;
  23. }
  24. while i < j {
  25. while arr[i] < pivot { i += 1; }
  26. while arr[j] > pivot { j -= 1; }
  27. if i < j {
  28. swap(arr, i, j);
  29. i += 1;
  30. j -= 1;
  31. }
  32. }
  33. if l < j { sort1(arr, l, j); }
  34. if j < r { sort1(arr, j, r); }
  35. }
  36. let len = arr.len() - 1;
  37. sort1(arr, 0, len);
  38. }
  39.  
Success #stdin #stdout 0.22s 40940KB
stdin
Standard input is empty
stdout
Standard output is empty