《算法图解》第四章笔记与课后练习_快速排序算法
软件环境: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)。
《算法图解》第四章笔记与课后练习_快速排序算法相关推荐
- 《算法图解》第二章笔记与课后练习_选择排序算法
软件环境:Python 3.7.0b4 一.选择排序 # 找出数组中的最小元素 def findSmallest(arr):# 存储最小的值smallest = arr[0]# 存储最小元素的索引sm ...
- 算法图解第六章笔记与习题(广度优先搜索)
算法图解第六章笔记与习题(广度优先搜索) 文章目录 算法图解第六章笔记与习题(广度优先搜索) 6.1 图(graph) 6.2 广度优先搜索 6.3.1 查找最短路径 6.3.2 队列 6.4 实现图 ...
- 《学习JavaScript数据结构与算法》 第四章笔记 栈
文章目录 前言 一.栈? 二.构建两种栈的大致步骤 三.创建基于数组的栈 创建class Stack 定义用于操作栈的方法 使用栈 四.创建基于对象的栈 创建class Stack 定义用于操作栈的方 ...
- 机器学习实战 基于_机器学习实战:基于Scikit-Learn和TensorFlow—第四章笔记
机器学习实战:基于Scikit-Learn和TensorFlow---第四章笔记 一.学习目标 之前用了那么多的机器学习的模型,但是它们各自的训练算法在很大程度上还是一个黑匣子,我们对对系统内部的实现 ...
- 【智能计算系统笔记】第一章笔记及课后习题
第一章笔记及课后习题 笔记 课后习题 1. 简述强人工智能和弱人工智能的区别. 2. 简述人工智能研究的三个学派. 3. 一个有两个输入的单个神经元构成的感知机能完成什么任务? 4. 深度学习的局限性 ...
- 算法复习第四章动态规划
算法复习第四章动态规划 动态规划 TSP问题 0-1bag 动态规划 TSP问题 0-1bag 最长公共子序列不考:
- 《算法笔记》第四章笔记
<算法笔记>第四章 排序 排序算法的思想都比较简单,而且c++可以直接用sort函数进行排序,一般不会直接写排序代码 归根到底就是每轮处理一个数据,n个数据只需处理n-1次即可变得有序 选 ...
- 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...
- 算法图解[Aditya Bhargava]--读书笔记
前导:读书笔记中涉及的实现代码地址链接 一.算法复杂度通过时间复杂度表示O(n) 大O表示法是一种特殊的表示法,指出了算法的速度有多快. 一些常见的大 O 运行时间: O(log n),也叫对数时间, ...
最新文章
- 狎昵关系和依恋情结辨诠
- 为何那么多人的网名都叫易天啊
- STL区间成员函数及区间算法总结
- java已知一个二叉树_Day58:对称的二叉树
- Java Integer的缓存策略
- yarn : 无法加载文件 E:\leading\NodeJs\info\node_global\yarn.ps1,因为在此系统上禁止运行脚本
- 向张小龙开炮!百度祭出智能小程序
- 软件测试:homework2
- IEC,ASTM,ISO,DIN,JIS等国际标准网站
- openstack创建虚拟机之后使用ssh登陆的解决办法
- FFmpeg总结(四)AV系列结构体之AVBuffer、AVBufferRef、AVBufferPool
- [C++]类的继承与派生
- Petalinux2019.1详细安装
- python爬虫实战:之爬取京东商城实例教程!(含源代码)
- acme申请证书报错:Please update your account with an email address first.的修复方法
- 《中国人史纲》读书笔记:第六、七章 纪元前八、七世纪
- “碰一碰”版本的蓝牙键盘,来啦!
- 视频监控系统由哪几部分组成?(视频监控入门基础-附思维导图)
- 一文理解分布式常见的一致性算法
- class file has wrong version 55.0, should be 52.0
热门文章
- java-模拟存放String类型数据的栈
- linux 编译文件mm,Linux编译C++文件,说没有找到头文件,怎么啊?新手,不太会用...
- mysql数据库二级233_MySQL数据库开发必备常识
- mfc c语言 编辑器,语法高亮编辑控件Scintilla在MFC中的简单使用
- java 读取 远程文件_利用JAVA获取远程文件及使用断点续传 供学习者使用
- linux内核实验平台搭建,搭建自己的Linux实验系统(一)
- centos 7 mysql 默认_centos7 mysql 5.6.30 默认配置文件
- html中表格的页眉页脚,有一个标准的页眉页脚布局HTML网页,而无需使用table标签...
- oracle RAC信息,Oracle 查看 RAC GI 版本信息
- IIS设置404页面图文教程(选择URL还是文件 )