快速排序
算法模式:二分法
时间复杂度为:O(nlogn) 思路:
- 防御性:长度小于 1 直接返回
- 获取中间值 middle
- 声明 left/right 空数组
- for 从 0 递增
- 小于中间值:
left.push(arr[i])
- 大于中间值:
right.push(arr[i])
- 小于中间值:
- 返回 左递归+concat+右递归
var quickSort = (arr) => {
// 为了排除小于空数组
if(arr.length <= 1){return arr}
// 获取中间值
var middleIndex = Math.floor(arr.length/2)
var middle = arr.splice(middleIndex,1)[0]
var left = []
var right = []
for(let i = 0;i<arr.length;i++){
if(arr[i] < middle){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
// 递归
return quickSort(left).concat([middle],quickSort(right))
}
与归并排序区别:快速排序是对比中间值,归并排序是对比左右