快速排序算法原理简介
前言
概念介绍
- 排序算法" title="快速排序算法">快速排序算法是对冒泡排序算法" title="冒泡排序算法">冒泡排序算法的一种改进
- 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
原理讲解
我们以[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)。此时快速排序算法退化为冒泡排序算法
算法优缺点
- 优点:速度快,效率高
- 缺点:不稳定
效果展示
以上是 快速排序算法原理简介 的全部内容, 来源链接: utcz.com/a/25062.html