sorting_algorithm/
quick_sort.rs1use fastrand;
2
3pub fn sort<T: Ord>(data: &mut [T]) {
21 if data.len() > 1 {
22 let pivot = partition(data);
23
24 sort(&mut data[..pivot]);
25 sort(&mut data[pivot + 1..]);
26 }
27}
28
29fn partition<T: Ord>(data: &mut [T]) -> usize {
30 let n = data.len();
31 let pivot = fastrand::usize(0..data.len());
32 data.swap(pivot, n - 1);
33
34 let mut i = 0;
35
36 for j in 0..n - 1 {
37 if data[j] <= data[n - 1] {
38 data.swap(i, j);
39 i += 1;
40 }
41 }
42
43 data.swap(i, n - 1);
44 i
45}