1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
///快速排序
pub fn quicksort<T: Ord>(arr: &mut [T]) ->() {
    if arr.len() <= 1 {
        return;
    }

    let pivot = arr.len() / 2;
    let mut left = 0;
    let mut right = arr.len() - 1;

    while left <= right {
        while arr[left] < arr[pivot] {
            left += 1;
        }
        while arr[right] > arr[pivot] {
            right -= 1;
        }
        if left <= right {
            arr.swap(left, right);
            left += 1;
            right -= 1;
        }
    }

    if right > 0 {
        quicksort(&mut arr[0..right + 1]);
    }
    if left < arr.len() {
        quicksort(&mut arr[left..]);
    }
}