Thanks to visit codestin.com
Credit goes to docs.rs

sorting_algorithm/
quick_sort.rs

1use fastrand;
2
3/// Sorts a data set using Quick Sort
4///
5/// Average time complexity: O(n logn)
6///
7/// # Examples
8///
9/// ```
10/// use sorting_algorithm::quick_sort;
11///
12/// fn main() {
13///     let mut data = [3, 1, 2, 5, 4];
14///     
15///     quick_sort::sort(&mut data);
16///
17///     assert_eq!(data, [1, 2, 3, 4, 5]);
18/// }
19/// ```
20pub 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}