快速排序
选择一个基准元素,将数组分为小于和大于基准的两部分,递归排序。
思路
- 选择数组第一个元素作为基准
num - 遍历剩余元素,分为两个数组:
left:小于等于基准的元素right:大于基准的元素
- 递归排序
left和right - 合并结果:
[...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)]
}复杂度
- 时间复杂度:平均
,最坏 - 空间复杂度:
递归栈空间 - 稳定性:不稳定