- 找一个基准值(一般是第 1 个元素)
- 遍历数组,与基准值比较,比基准值小的放在左边数组,比基准值大的放在右边数组
- 递归处理,将左边数组、基准值、右边数组组成新的数组
时间复杂度是 O(nlogn),空间复杂度是 O(logn)
时间复杂度为什么是 O(nlogn)
假设在平均情况下每次选取的基准值均为该数组的中间值,因此每次都将数组分成两半,直到分割到只剩一个元素。假设n个元素平分了x次后只剩1个元素,则n/2^x=1(n/2/2/2/..),x=log2n。每次分割后的比较次数为n,所以时间复杂度为nlogn。
为什么空间复杂度是 O(logn)
因为递归的时候,每个 quickSort 函数都不会被销毁,需要保留变量,将会有 logn 个 quickSort 函数,所以空间复杂度是 O(logn)。
代码核心逻辑
一层 for 循环,代表比较的元素
- 注意边界条件
-
代码
```javascript function quickSort(arr) { if (arr.length <= 1) { return arr; }
const leftArr = []; const rightArr = []; const pivot = arr[0];
for (let i = 1; i < arr.length; i++) { if (arr[i] <= pivot) { leftArr.push(arr[i]); } else { rightArr.push(arr[i]); } }
return quickSort(leftArr).concat(pivot, quickSort(rightArr)); }
const arr = [3, 2, 9, 1, 4, 8, 5, 7, 0, 6]; ```