Skip to content

快速排序

选择一个基准元素,将数组分为小于和大于基准的两部分,递归排序。

思路

  • 选择数组第一个元素作为基准 num
  • 遍历剩余元素,分为两个数组:
    • left:小于等于基准的元素
    • right:大于基准的元素
  • 递归排序 leftright
  • 合并结果:[...quickSort(left), num, ...quickSort(right)]

代码

js
// 快速排序
// 选择一个基准元素,遍历与其对比
function quickSort(arr){
    if(arr.length <= 1){
        return arr;
    }
    const num = arr[0];
    const left = [];
    const right = [];
    for(let i = 1; i < arr.length; i++){
        if(arr[i] > num){
            right.push(arr[i]);
        }
        else{
            left.push(arr[i])
        }
    }
    return [...quickSort(left), num, ...quickSort(right)]
}

复杂度

  • 时间复杂度:平均 O(nlogn),最坏 O(n2)
  • 空间复杂度:O(logn) 递归栈空间
  • 稳定性:不稳定