经典算法之快速排序

Posted Duing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法之快速排序相关的知识,希望对你有一定的参考价值。


快速排序是我们经常听到的排序算法,那我们今天就来聊聊传说中的快速排序~


经典算法之快速排序


快速排序的本质就是使用分治法来将一个数组分为两个子数组,然后使用递归的方式一层一层的分治下去~


有的同学不知道什么是分治算法的思想,分治算法是将一个规模比较大的问题分解为若干个规模比较小,但是结构与原问题相似的子问题。然后用递归的方式去解决这些问题,这个算法过程称为分治算法。


递归排序可以分为三个部分:

1.从数组中选出一个元素作为“基数”

2.使用刚才选出的基数,比基数小的放在左边,比基数大的放在右边

3.将左边的数组和右边的数组再用上述方式继续排序


具体的代码如下图:

经典算法之快速排序


调用排序方法:

经典算法之快速排序


运行结果如下图所示:

经典算法之快速排序


在这个排序过程中,一定要注意左侧指针i和右侧指针j的位置关系,最后一定要让i和j相等。


快速排序的时间复杂度为nlog(n),那么是不是快速排序就是像名字那样非常的快速呢?其实并不然,快速排序是平均性能最好的排序,但并不是对每个数组的排序都是性能最好的。


性能最坏的时候,可能和插入排序的性能是一样的(事件复杂度为O(n^2));最快的情况发生在,每一轮和基数比较之后,生成的两个子数组一个长度为1、另一个长度为n-1。最好的情况发生在每轮排序之后,生成的两个子数组的长度相等或者相差1。


快速排序最好的情况下,空间复杂度为:O(logn);最坏的情况下,空间复杂度退化为冒泡排序的情况:O(n)。


所以总的来说,我们可以理解为,数组的序列越“乱”,排序的效果就越好。



经典算法之快速排序

最近微信改版了

大家记得把【Duing】设置成星标哦

这样才不会错过消息!


经典算法之快速排序


经典算法之快速排序

小伙伴们,你们还想看什么类型、题材的文章?或者在学习前端过程中有哪些痛点呢?欢迎在图文下方给小渡留言,小渡会筛选出共性问题,或呼声最高的类型文章,手动联系业内大牛帮你约稿哦~

以上是关于经典算法之快速排序的主要内容,如果未能解决你的问题,请参考以下文章

三大经典排序算法之最经典之快速排序

经典排序算法之快速排序

白话经典算法系列之六 快速排序 快速搞定 转

经典排序算法之——06 快速排序

Scratch之十大经典排序算法-快速排序

白话经典算法系列之六 快速排序 快速搞定