算法 快速排序

这是最近在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也是一样
最后将这些拼到一块  这个方法理解比较简单

借用知乎大佬图解如下

原链接(C语言):深入理解快速排序(quciksort) - 知乎Quicksort 的前世今生 直接贴百科的,简单了解下即可,重要的是思想,是冒泡排序的升级版(思想很像)。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,…https://zhuanlan.zhihu.com/p/63202860

核心思想

1.选取一个元素作为指针(基准),通常为第一个元素

2.比基准小的移动到左边,大的移动到右边。最后相等时候的空位填入指针(基准)

如下是图解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值