排序(4):快速排序

star2017 1年前 ⋅ 151 阅读
摘要

快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出。

一、前言

快速排序是一种交换排序,它由C. A. R. Hoare1962年提出。

二、算法思想

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。

然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

动态效果示意图:

详细的图解往往比大堆的文字更有说明力,所以直接上图:

上图中,演示了快速排序的处理过程:

初始状态为一组无序的数组:24513

经过以上操作步骤后,完成了第一次的排序,得到新的数组:12543

新的数组中,以2为分割点,左边都是比2小的数,右边都是比2大的数。

因为2已经在数组中找到了合适的位置,所以不用再动。

2左边的数组只有一个元素1,所以显然不用再排序,位置也被确定。(注:这种情况时,left指针和right指针显然是重合的。因此在代码中,我们可以通过设置判定条件left必须小于right,如果不满足,则不用排序了)。

而对于2右边的数组543,设置left指向5right指向3,开始继续重复图中的一、二、三、四步骤,对新的数组进行排序。

1、代码

C++:

运行结果:

Python:

运行结果同上。

三、算法分析

1、快速排序算法的性能

2、时间复杂度

当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差。

而当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好。

所以,数据越随机分布时,快速排序性能越好;数据越接近有序,快速排序性能越差。

3、时间复杂度

快速排序在每次分割的过程中,需要 1 个空间存储基准值。而快速排序的大概需要 logN次的分割处理,所以占用空间也是 logN 个。

4、算法稳定性

在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。

 

本站整理自:

http://www.cnblogs.com/jingmoxukong/p/4302891.html

https://61mon.com/index.php/archives/201/

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: