算法图解 (四)

第四章 快速排序

分而治之

这个概念是书中一直提到的, 个人理解就是把问题分解出来, 抽出来一小块一小块解决

递归

第三章就讲到递归了, 两个关键点找出基线条件和递归条件

记得之前写过一个妹纸图爬虫, 主要就是用的递归调取本身, 来爬取下一页的图片。 整个站都可以爬下来, 前提是网站反爬不厉害...

快速排序

简称快排, 一种排序算法。 在平均情况下, 排序 n 个项目要 O(nlogn)。 最坏的情况下则需要 O(n2)。 事实上,快速排序 O(nlogn) 通常明显比其他算法更快, 因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成

代码:

# coding: utf-8

"""
快速排序
"""

def quick_sort(arr):
    if len(arr) < 2:
        return arr
    else:
        temp = arr[0]
        less = [i for i in arr[1:] if i < temp]
        greater = [i for i in arr[1:] if i > temp]

        return quick_sort(less) + [temp]+ quick_sort(greater)

arr = [32, 4, 54, 65, 5, 864]
print(quick_sort(arr))

小结

  • 分而治之将问题逐步分解. 使用分而治之处理列表的时候, 基线条件可能是空数组或只包含一个元素的数组
  • 实现快速排序, 请随机的选择用作基准值的元素。 快速排序的平均运行时间 O(nlogn)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章是《图解算法》一书的摘抄总结。原书标题是《Grokking Algorithms》,grok是中文“意会”...
    SeanCheney阅读 8,268评论 0 14
  • 搞懂基本排序算法 上篇文章写了关于 Java 内部类的基本知识,感兴趣的朋友可以去看一下:搞懂 JAVA 内部类;...
    醒着的码者阅读 4,952评论 3 4
  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 5,321评论 0 1
  • 余生,想成为什么样的人? 好玩、有趣的人。 一生太长 一眼看到头的生命,多一天也是长 一生太短 生命是如此丰富多彩...
    理想家园阅读 1,859评论 0 0
  • 还有两天多一点儿,2016年就可以“结案”啦~ 通常这个时候,很多人会总结一下今年,展望一下明年~其实并没有什么卵...
    AstridXiao阅读 1,618评论 0 1