《算法图解》NOTE 4 快速排序法

作者: billiam | 来源:发表于2018-05-28 23:17 被阅读17次

这是《算法图解》的第四篇读书笔记,主要涉及快速排序法。

1.递归与分治法

快速排序法(quick sort)之所以有这个名称,源于其排序速度,相较于其他排序方式来说,较快。而其高排序效率,主要源于其使用了分治法(divide and conquer)的思路。
所谓分治法,即分而治之,将一个问题划分为几个子问题,而后解决子问题。当然,子问题可以再分解为几个子问题,直到子问题不能再划分时,解决不能再划分的子问题。若有需要,可以将子问题的答案合并,作为原问题的答案。请注意,解决问题的方法一直保持不变。
为什么上述的思路可行呢,简单来说,可用数学归纳法进行说明。
对与规模为n的原问题,需证明解决方案:
在问题规模为n时可行的时候:
n=1(最小规模的问题)可行,
同时规模为n+1时仍可行。
具体的数学证明,请参考相关的资料。
分治法的思路是否和上一篇读书笔记所述的递归(recursion)相似呢。实,分治法是通过递归实现的。

2.快速排序法的实现

如上文所说,快速排序法应用了分治法的思想。其具体思路如下:
1.从原序列中选择一个数作为基础值
2.将原序列中的元素按照与基础值的大小比较结果,分为大于基础值、小于基础值两个序列:S1和S2.
3.将元素列按照S1、基础值和S2的顺序组合成一个新序列并将新序列返回。
4.分别将S1和S2重复步骤1、步骤2和步骤3。
5.重复步骤4,直到划分后的序列只有一个或零个元素,此时直接返回含有单个元素或0个元素的序列。
代码如下:

#演示快速排序法,排序结果以降序显示
def quick_sort(seq):
    #基线条件
    if len(seq)<2:
        return seq
    base_value=seq[0]
    less=[]
    large=[]
    #划分子序列
    for idx in range(1,len(seq)):
        if base_value>=seq[idx]:
            less.append(seq[idx])
        else:
            large.append(seq[idx])
    return quick_sort(large)+[base_value]+quick_sort(less)

seq=[10,15,12,18,15,1]
print(quick_sort(seq))

3.快速排序法的时间复杂度(用渐近表示法表示)

基于分治思想的快速排序法,其时间复杂度为n*log2 n 。

相关文章

  • 《算法图解》NOTE 4 快速排序法

    这是《算法图解》的第四篇读书笔记,主要涉及快速排序法。 1.递归与分治法 快速排序法(quick sort)之所以...

  • 代码小工蚁的#《算法图解》#学习笔记-C4快速排序

    代码小工蚁的#《算法图解》#学习笔记-C4快速排序C4 快速排序quicksort 一、递归式问题的解决方法 递归...

  • iOS常见算法

    升序算法:用冒泡排序法 选择排序法 快速排序

  • iOS实现冒泡排序、快速排序、选择排序、希尔排序、插入排序等算法

    1、冒泡排序 图解: 2、选择排序 图解: 3、快速排序 图解: 4、插入排序 图解: 5、希尔排序 图解: 6、...

  • 排序算法

    排序算法分类 排序算法常用主要有:冒泡排序法、快速排序法、选择排序法、插入排序法、堆排序法、归并排序法等几种。 ...

  • 快排算法----挖坑法

    教科书算法: [图解快速排序] 觉得比较好的算法(有点争议,但是可以参考): [坐在马桶上看算法:快速排序] 本人代码:

  • 快速排序(1)

    快速排序是经典的排序算法,最理想的情况下,时间复杂度近乎二分法,平均时间复杂度为O(nlogn)关于快速排序的图解...

  • 《python算法教程》Day9 - 快速排序法

    这是《python算法教程》第9篇读书笔记,笔记的主要内容为快速排序法。 快速排序法简介 快速排序法运用分治法的方...

  • 快速排序

    最近看了算法图解这本书,讲讲里面的快速排序: 快速排序的精髓在于 基准值和分而治之思想; 快速排序的基本步骤: 选...

  • 算法导论阅读笔记4-快速排序

    Note:堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入...

网友评论

    本文标题:《算法图解》NOTE 4 快速排序法

    本文链接:https://www.haomeiwen.com/subject/namnjftx.html