这是最近在bili看的一位博主的视频,事件1min,虽然很短但是写的很好,也便于理解。
使用递归
总的来说就是,
随机选一个数,比他大的都放在right 等于就是middle 小的都放在left
然后递归
在right当中重新使用quickSort然后又是在right使用quickSort 当然left也是一样
最后将这些拼到一块
const arr = [56, 15, 4, 9, 10]
const quickSort = array => {
let left = []
let middle = []
let right = []
if (array.length < 2) {
return array.slice()
}
// 随机找到pivot
let pivot = array[Math.floor(Math.random() * array.length)]
console.log(pivot);
for (let i = 0; i < array.length; i++) {
var value = array[i]
if (value < pivot) {
left.push(value)
console.log('left:' + left);
}
if (value === pivot) {
middle.push(value)
console.log('=========middle:' + middle);
}
if (value > pivot) {
right.push(value)
console.log('==============================right:' + right);
}
}
console.log(left);
console.log(middle);
console.log(right);
// quickSort(left)
// quickSort(right)
// return newArr = [...left, ...middle, ...right]
// 递归进行
return quickSort(left).concat(middle, quickSort(right))
}
打印结果如下(每次打印结果都不一样)
总的来说就是,
随机选一个数,比他大的都放在right 等于就是middle 小的都放在left
然后递归
在right当中重新使用quickSort然后又是在right使用quickSort 当然left也是一样
最后将这些拼到一块 这个方法理解比较简单
借用知乎大佬图解如下
核心思想
1.选取一个元素作为指针(基准),通常为第一个元素
2.比基准小的移动到左边,大的移动到右边。最后相等时候的空位填入指针(基准)
如下是图解