1. 找一个基准值(一般是第 1 个元素)
  2. 遍历数组,与基准值比较,比基准值小的放在左边数组,比基准值大的放在右边数组
  3. 递归处理,将左边数组、基准值、右边数组组成新的数组
  4. 时间复杂度是 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)。

    代码核心逻辑

  5. 一层 for 循环,代表比较的元素

  6. 注意边界条件
  7. 递归调用

    代码

    ```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]; ```