软件环境:Python 3.7.0b4

一、分而治之

工作原理:

  • 找出简单的基线条件;
  • 确定如何缩小问题的规模,使其符合基线条件。

# 4.2
def count(list):if list == []:return 0return 1 + count(list[1:])# 4.3
def max(list):if len(list) == 2:return list[0] if list[0] > list[1] else list[1]sub_max = max(list[1:])return list[0] if list[0] > sub_max else sub_max

4.4:二分查找的基线条件是数组只包含一个元素。如果要查找的值与这个元素相同,就找到了!否则说明它不在数组中。递归条件为 把数组分成两半,将其中一半丢弃,并对另一半执行二分查找。

二、快速排序

def quicksort(array):if len(array) < 2:# 基线条件:为空或只包含一个元素的数组是“有序”的return arrayelse:# 递归条件pivot = array[0]# 由所有小于等于基准值的元素组成的子数组less = [i for i in array[1:] if i <= pivot]# 由所有大于基准值的元素组成的子数组greater = [i for i in array[1:] if i > pivot]return quicksort(less) + [pivot] + quicksort(greater)print(quicksort([10, 5, 2, 3])) # 需排序的数组

三、小结

  • 分治法是将问题逐步分解。使用分治法处理列表时,基线条件很可能是空数组或只包含一个元素的数组。
  • 实现快速排序时,请随机地选择用作基准值的元素。快速排序的平均运行时间为O(nlog n)。

《算法图解》第四章笔记与课后练习_快速排序算法相关推荐

  1. 《算法图解》第二章笔记与课后练习_选择排序算法

    软件环境:Python 3.7.0b4 一.选择排序 # 找出数组中的最小元素 def findSmallest(arr):# 存储最小的值smallest = arr[0]# 存储最小元素的索引sm ...

  2. 算法图解第六章笔记与习题(广度优先搜索)

    算法图解第六章笔记与习题(广度优先搜索) 文章目录 算法图解第六章笔记与习题(广度优先搜索) 6.1 图(graph) 6.2 广度优先搜索 6.3.1 查找最短路径 6.3.2 队列 6.4 实现图 ...

  3. 《学习JavaScript数据结构与算法》 第四章笔记 栈

    文章目录 前言 一.栈? 二.构建两种栈的大致步骤 三.创建基于数组的栈 创建class Stack 定义用于操作栈的方法 使用栈 四.创建基于对象的栈 创建class Stack 定义用于操作栈的方 ...

  4. 机器学习实战 基于_机器学习实战:基于Scikit-Learn和TensorFlow—第四章笔记

    机器学习实战:基于Scikit-Learn和TensorFlow---第四章笔记 一.学习目标 之前用了那么多的机器学习的模型,但是它们各自的训练算法在很大程度上还是一个黑匣子,我们对对系统内部的实现 ...

  5. 【智能计算系统笔记】第一章笔记及课后习题

    第一章笔记及课后习题 笔记 课后习题 1. 简述强人工智能和弱人工智能的区别. 2. 简述人工智能研究的三个学派. 3. 一个有两个输入的单个神经元构成的感知机能完成什么任务? 4. 深度学习的局限性 ...

  6. 算法复习第四章动态规划

    算法复习第四章动态规划 动态规划 TSP问题 0-1bag 动态规划 TSP问题 0-1bag 最长公共子序列不考:

  7. 《算法笔记》第四章笔记

    <算法笔记>第四章 排序 排序算法的思想都比较简单,而且c++可以直接用sort函数进行排序,一般不会直接写排序代码 归根到底就是每轮处理一个数据,n个数据只需处理n-1次即可变得有序 选 ...

  8. 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...

  9. 算法图解[Aditya Bhargava]--读书笔记

    前导:读书笔记中涉及的实现代码地址链接 一.算法复杂度通过时间复杂度表示O(n) 大O表示法是一种特殊的表示法,指出了算法的速度有多快. 一些常见的大 O 运行时间: O(log n),也叫对数时间, ...

最新文章

  1. 狎昵关系和依恋情结辨诠
  2. 为何那么多人的网名都叫易天啊
  3. STL区间成员函数及区间算法总结
  4. java已知一个二叉树_Day58:对称的二叉树
  5. Java Integer的缓存策略
  6. yarn : 无法加载文件 E:\leading\NodeJs\info\node_global\yarn.ps1,因为在此系统上禁止运行脚本
  7. 向张小龙开炮!百度祭出智能小程序
  8. 软件测试:homework2
  9. IEC,ASTM,ISO,DIN,JIS等国际标准网站
  10. openstack创建虚拟机之后使用ssh登陆的解决办法
  11. FFmpeg总结(四)AV系列结构体之AVBuffer、AVBufferRef、AVBufferPool
  12. [C++]类的继承与派生
  13. Petalinux2019.1详细安装
  14. python爬虫实战:之爬取京东商城实例教程!(含源代码)
  15. acme申请证书报错:Please update your account with an email address first.的修复方法
  16. 《中国人史纲》读书笔记:第六、七章 纪元前八、七世纪
  17. “碰一碰”版本的蓝牙键盘,来啦!
  18. 视频监控系统由哪几部分组成?(视频监控入门基础-附思维导图)
  19. 一文理解分布式常见的一致性算法
  20. class file has wrong version 55.0, should be 52.0

热门文章

  1. java-模拟存放String类型数据的栈
  2. linux 编译文件mm,Linux编译C++文件,说没有找到头文件,怎么啊?新手,不太会用...
  3. mysql数据库二级233_MySQL数据库开发必备常识
  4. mfc c语言 编辑器,语法高亮编辑控件Scintilla在MFC中的简单使用
  5. java 读取 远程文件_利用JAVA获取远程文件及使用断点续传 供学习者使用
  6. linux内核实验平台搭建,搭建自己的Linux实验系统(一)
  7. centos 7 mysql 默认_centos7 mysql 5.6.30 默认配置文件
  8. html中表格的页眉页脚,有一个标准的页眉页脚布局HTML网页,而无需使用table标签...
  9. oracle RAC信息,Oracle 查看 RAC GI 版本信息
  10. IIS设置404页面图文教程(选择URL还是文件 )