sort_alogorithms/sort/
quick_sort.rs

1
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}