排序方法之五:快速排序
Posted 大师兄编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序方法之五:快速排序相关的知识,希望对你有一定的参考价值。
排序方法之快速排序
基于分治的思想,是冒泡排序的改进型。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
1
算法讲解
设定原始序列{ 6 、1 、 2 、7 、9 、 3 、4 、 5 、10 、 8 }
第一步:将序列第一个元素作为基数,然后定义i、j两个哨兵分别从左边和右边进行嗅探。先从右边j开始向左嗅探。
第二步:哨兵j从右边依次向左嗅探,直到找到第一个比基数6小的元素然后停下,也就是停留在5的位置。这时候i从左边开始向右嗅探,直到找到第一个比基数大的元素7然后停下,也就是7的位置。这时候就要交换i和j对应的元素7和5。
得到结果:
第三步:哨兵j又开始从右向左嗅探,直到找到下一个比基数小的元素4然后停下,此时哨兵i又开始向右嗅探,直到找到下一个比基数大的元素9然后停下,这时候交换两个元素的位置。
得到结果:
第四步:哨兵j又开始向左嗅探,遇到下一个比基数小的元素3然后停下,哨兵i又向右嗅探。完了,这时候哨兵i和j相遇了,他们就准备私奔,但是私奔之前还有一件事要做,就是把这个元素和基数进行交换。
得到结果:
这时候,第一轮嗅探就算完成了,这个序列也被基数6分为了两个部分,左边都小于等于基数,右边都大于等于基数。但是排序还没完哦,我们继续将原来的序列,以6为分界点拆分成了两个序列,分别用上述方法再次进行排序,依次递归下去,直到序列不能被拆分就结束了哦。
2
代码实现
这里我们换用C语言代码实现一下
怎么样?还不错吧,其实还挺好理解的,相信你一定行的。下面我们分析一下这个算法。
3
算法分析
1、时间复杂度:时间复杂度O(nlogn)
2、空间复杂度:快速排序使用递归,递归使用栈,因此它的空间复杂度为O(logn)。
3、稳定性:快速排序无法保证相等的元素的相对位置不变,因此它是不稳定的排序算法。
今天的快速排序到此就结束啦
或者加私人微信进微信群:bin18382734270
一百分服务,只为你十分满意
我知道你在看哟
以上是关于排序方法之五:快速排序的主要内容,如果未能解决你的问题,请参考以下文章