# 题目描述

请实现快速排序

# 测试用例

输入:[0,-1,1,-2,2] 输出:[-2,-1,0,1,2]

# 代码实现

let arr = [5, 3, 6, 7, 4, 1, 0, 2, 9, 10, 8];

let quickSort = (arr, left, right) => {
    

    // 第一个值为基准
    // 把第一个值拿出去,位置空出来,也就是l或者r此时的位置
    
    if(left < right){
        let l = left;
        let r = right;
        let pivot = arr[l];
        // 先从后往前找比pivot小的值
        while(l < r){
            while(l < r && arr[r] >= pivot){
                r --;
            }
        // 找到了,把它放到空出来的位置
            if(l < r){
                arr[l] = arr[r];
                l ++;
            }
        

        // 再从前往后找
            while(l < r && arr[l] <= pivot){
                l ++;
            }
            if(l < r){
                arr[r] = arr[l];
                r --;
            }
        }

        // 最后空出来的位置就是pivot的位置
        arr[l] = pivot;
        // 分别递归pivot两边的子数组
        quickSort(arr, left, l - 1);
        quickSort(arr, l + 1, right);
    }
};
quickSort(arr, 0, arr.length - 1);
console.log(arr);
/*
[
   0, 1, 2, 3, 4,
   5, 6, 7, 8, 9,
  10
]
*/
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50