vlambda博客
学习文章列表

快速排序算法究竟有多快?

前言

快速排序算法究竟有多快?快速排序算法究竟有多快?快速排序算法究竟有多快?快速排序算法究竟有多快?

概念介绍

  • 快速排序算法是对冒泡排序算法的一种改进

  • 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

原理讲解

我们以[2 17 17 24 34 41]这个序列为例说明快速排序算法的实现原理

  1. 未开始排序算法之前,此时效果如下图


    快速排序算法究竟有多快?

  2. 准备开始排序之前,我们取序列最左边的元素24所在位置为low指针,取序列最右边元素41所在位置为high指针。并取序列最右边元素24为基准值。此时效果如下图


    快速排序算法究竟有多快?

  3. 刚开始时,我们将high指针从右往左移动,寻找小于基准值24的元素。当找到第一个小于基准值的元素19时,此时效果如下图


    快速排序算法究竟有多快?

    将high指针所指的元素和low指针所指的元素交换位置。此时效果如下图


    快速排序算法究竟有多快?

  4. 再从low指针从左往右移动,寻找大于基准值24的元素。当找到第一个大于基准值的元素34时,此时效果如下图


    快速排序算法究竟有多快?

    将high指针所指的元素和low指针所指的元素交换位置。此时效果如下图


    快速排序算法究竟有多快?

  5. 此时low指针和high指针并未重合,说明整个序列并未遍历一遍。我们继续将high指针从右往左移动,寻找小于基准值24的元素,当再次找到第一个小于基准值的元素2时,此时效果如下图


    快速排序算法究竟有多快?

    将high指针所指的元素和low指针所指的元素交换位置。此时效果如下图


    快速排序算法究竟有多快?

  6. 经过上述步骤,low指针和high指针重合,序列完成第一次遍历。此时整个序列以[2 17 17 24 34 41]拆分成左子序列以[19 17 2]和右子序列以[24 34 41],效果如下图


    快速排序算法究竟有多快?

  7. 将左子序列[19 17 2]和右子序列[24 34 41]分别进行快速排序过程,直至整个序列排序完成,此时效果如下图


时间复杂度

  • 最优情况下,快速排序算法时间复杂度为O(N*logN)

  • 一般情况下,快速排序算法时间复杂度为O(N*logN)

  • 最差情况下,快速排序算法时间复杂度为O(N^2)

空间复杂度

  • 最优情况下,快速排序算法空间复杂度为O(logN)

  • 最差情况下,快速排序算法空间复杂度为O(N)。此时快速排序算法退化为冒泡排序算法

算法优缺点

  • 优点:速度快,效率高

  • 缺点:不稳定

效果展示

说明

  • 我的CSDN:多米学算法

  • 本文仅仅展示该算法的效果,方便大家直观的理解。为了不增加大家理解的负担,故没有展示代码。如果您对代码感兴趣,可以进入我的CSDN免费下载源码。

  • 源码展示的效果可能您不满意,不过没关系,你可以在源码的基础上修改

  • 如果您对可视化算法也感兴趣,赶紧和我一起学习吧