使用递归
总的来说就是,
随机选一个数,比他大的都放在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也是一样
最后将这些拼到一块 这个方法理解比较简单
借用知乎大佬图解如下
原链接(C语言):深入理解快速排序(quciksort) - 知乎Quicksort 的前世今生 直接贴百科的,简单了解下即可,重要的是思想,是冒泡排序的升级版(思想很像)。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,…https://zhuanlan.zhihu.com/p/63202860
核心思想
1.选取一个元素作为指针(基准),通常为第一个元素
2.比基准小的移动到左边,大的移动到右边。最后相等时候的空位填入指针(基准)
如下是图解