基本思路:
1.以一个数为基准(中间的数),比基准小的放到左边,比基准大的放到右边
2.再按此方法对这两部分数据分别进行快速排序(递归进行)
3.不能再分后退出递归,并重新将数组合并
代码实现:
function quickSort(arr) {
// 数组长度小于,没必要排序,直接返回
if (arr.length <= 1) {
return arr
}
// piovt为基准索引
var piovtIndex = Math.floor(arr.length / 2)
// 找到基准,并且将基准从原数组中删除
var piovt = arr.splice(piovtIndex, 1)[0]
// 定义左右数组
let left = []
let right = []
// 比基准小的放在左边,比基准大的放在右边
arr.forEach(el => {
if (el < piovt) {
left.push(el)
} else {
right.push(el)
}
});
// 不能再分,退出递归,并将新数组进行合并
return quickSort(left).concat([piovt], quickSort(right))
}
var arr = [12, 45, 78, 2, 23, 4, 5, 6]
console.log(quickSort(arr))