快速排序算法究竟有多快?
前言
概念介绍
快速排序算法是对冒泡排序算法的一种改进
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
原理讲解
我们以[2 17 17 24 34 41]这个序列为例说明快速排序算法的实现原理
未开始排序算法之前,此时效果如下图
准备开始排序之前,我们取序列最左边的元素24所在位置为low指针,取序列最右边元素41所在位置为high指针。并取序列最右边元素24为基准值。此时效果如下图
刚开始时,我们将high指针从右往左移动,寻找小于基准值24的元素。当找到第一个小于基准值的元素19时,此时效果如下图
将high指针所指的元素和low指针所指的元素交换位置。此时效果如下图
再从low指针从左往右移动,寻找大于基准值24的元素。当找到第一个大于基准值的元素34时,此时效果如下图
将high指针所指的元素和low指针所指的元素交换位置。此时效果如下图
此时low指针和high指针并未重合,说明整个序列并未遍历一遍。我们继续将high指针从右往左移动,寻找小于基准值24的元素,当再次找到第一个小于基准值的元素2时,此时效果如下图
将high指针所指的元素和low指针所指的元素交换位置。此时效果如下图
经过上述步骤,low指针和high指针重合,序列完成第一次遍历。此时整个序列以[2 17 17 24 34 41]拆分成左子序列以[19 17 2]和右子序列以[24 34 41],效果如下图
将左子序列[19 17 2]和右子序列[24 34 41]分别进行快速排序过程,直至整个序列排序完成,此时效果如下图
时间复杂度
最优情况下,快速排序算法时间复杂度为O(N*logN)
一般情况下,快速排序算法时间复杂度为O(N*logN)
最差情况下,快速排序算法时间复杂度为O(N^2)
空间复杂度
最优情况下,快速排序算法空间复杂度为O(logN)
最差情况下,快速排序算法空间复杂度为O(N)。此时快速排序算法退化为冒泡排序算法
算法优缺点
优点:速度快,效率高
缺点:不稳定
效果展示
说明
我的CSDN:多米学算法
本文仅仅展示该算法的效果,方便大家直观的理解。为了不增加大家理解的负担,故没有展示代码。如果您对代码感兴趣,可以进入我的CSDN免费下载源码。
源码展示的效果可能您不满意,不过没关系,你可以在源码的基础上修改
如果您对可视化算法也感兴趣,赶紧和我一起学习吧