实现的思路
- 选择一个数组中的某一项做为基准(这里选择中间的这一项作为基准)
- 将这一项从原数组中删除
- 将原数组中的每一项与基准项进行比较,比基准项小的放入左数组中,比基准项大的放入右数组中
- 分别对左、右数组进行以上操作,直到数组长度小于等于1时结束
- 将左数组、基准项、右数组拼接成一个数组
代码
function quickSort(arr){
if(arr.length<=1){
return arr;
}
let mid = Math.floor(arr.length/2) //基准项
let midValue = arr.splice(mid,1)[0] //记录下基准项的值
let left = [], right = [];
arr.forEach(item => {
item < midValue ? left.push(item) : right.push(item);
})
return quickSort(left).concact(midValue, quickSort(right));
}
时间复杂度和空间复杂度
- 时间复杂度: 最好、平均都是 O(nlogn) 最坏的情况是 O(n2)
- 空间复杂度:O(logn)