经典算法之快速排序
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】设置成星标哦
这样才不会错过消息!
小伙伴们,你们还想看什么类型、题材的文章?或者在学习前端过程中有哪些痛点呢?欢迎在图文下方给小渡留言,小渡会筛选出共性问题,或呼声最高的类型文章,手动联系业内大牛帮你约稿哦~
以上是关于经典算法之快速排序的主要内容,如果未能解决你的问题,请参考以下文章