sort_alogorithms/sort/
quick_sort.rs1
2
3fn partion<T>(arr: &mut Vec<T>, start: usize, end: usize, compare: fn(T, T) -> bool) -> i64
4where
5 T: Copy + Clone + PartialOrd + PartialEq,
6{
7 let mut pivot = arr[end];
8
9 let mut index = start;
10
11 let mut i = start;
12
13 while i < end {
14 if compare(arr[i], pivot) {
15 arr.swap(i, index);
16 index += 1;
17 }
18 i += 1;
19 }
20 arr.swap(index, end);
21 index as i64
22}
23
24pub fn quick_sort<T>(arr: &mut Vec<T>, start: usize, end: usize, compare: fn (T, T) -> bool)
25where
26 T: Copy + Clone + PartialEq + PartialOrd,
27{
28 if start >= end {
29 return;
30 }
31 let p = partion(arr, start, end, compare);
32
33 quick_sort(arr, start, if p != 0 { p - 1 } else { p } as usize, compare);
34 quick_sort(arr, (p + 1) as usize, end, compare);
35}