史上最简单!冒泡、选择排序的Python实现及算法优化详解
1、排序概念内部排序和外部排序根据排序过程中,待排序的数据是否全部被放在内存中,分为两大类:内部排序:指的是待排序的数据存放在计算机内存中进行的排序过程;外部排序:指的是排序中要对外存储器进行访问的排序过程。内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原则可以将它们分为5类:插入排序、交换排序、选择排序、归并排序;根据排序过程的时间复杂度来分,可以分为简单排序、先进排序。冒泡排序、简单选择排序、直接插入排序就是简单排序算法。评价排序算法优劣的标准主要是两条:一是算法的运算量,这主要是通过记录的比较次数和移动次数来反应;另一个是执行算法所需要的附加存储单元的的多少。
2、简单排序之冒泡法Python实现及优化原理图
2.1、基本实现
2.2、优化实现思路:如果本轮有交互,就说明顺序不对;如果本轮无交换,说明是目标顺序,直接结束排序。
总结:冒泡法需要数据一轮轮比较。优化,则可设定一个标记判断此轮是否有数据交换发生,如果没有发生交换,可以结束排序,如果发生交换,继续下一轮排序最差的排序情况是,初始顺序与目标顺序完全相反,遍历次数1,...,n-1之和n(n-1)/2最好的排序情况是,初始顺序与目标顺序完全相同,遍历次数n-1时间复杂度O(n^2)3、简单排序之选择排序Python实现及优化选择排序的核心:每一轮比较找到一个极值(最大值或最小值)放到某一端,对剩下的数再找极值,直至比较结束。原理图
3.1、基本实现
3.2、优化实现——二元选择排序思路:减少迭代次数,一轮确定2个数,即最大数和最小数。
3.3、等值情况优化思路:二元选择排序的时候,每一轮可以知道最大值和最小值,如果某一轮最大最小值都一样了,说明剩下的数字都是相等的,直接结束排序。
3.4、等值情况优化进阶思路:[1, 1, 1, 1, 1, 1, 1, 1, 2] 这种情况,找到的最小值索引是-2,最大值索引8,上面的代码会交换2次,最小值两个1交换是无用功,所以,增加一个判断。
还可能存在一些特殊情况可以优化,但是都属于特例的优化了,对整个算法的提升有限。总结简单选择排序需要数据一轮轮比较,并在每一轮中发现极值没有办法知道当前轮是否已经达到排序要求,但是可以知道极值是否在目标索引位置上遍历次数1,...,n-1之和n(n-1)/2时间复杂度O(n^2)减少了交换次数,提高了效率,性能略好于冒泡法
阅读更多作者:mexp来源:http://me2xp.blog.51cto.com/6716920/1968672
- 史上最简单!冒泡、选择排序的Python实现及算法优化详解
- 史上最简单!冒泡、选择排序的Python实现及算法优化详解
- 排序算法(三)冒泡、选择排序的Python实现及算法优化详解 推荐
- 排序:简单排序算法实现:冒泡,选择,插入
- [Python-算法]python实现冒泡,插入,选择排序
- 《面试》 几种经典的简单的排序方法(冒泡,选择,插入)python实现
- Python实现冒泡,插入,选择排序简单实例
- Python实现冒泡,插入,选择排序简单实例
- (数据结构排序的实验四)快速,冒泡,简单选择,直接插入排序的c语言实现!!
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- Python实现的选择排序算法原理与用法实例分析
- Python实现各类数据结构和算法---直接选择排序
- python实现2种简单的排序算法--冒泡排序和选择排序
- Java实现简单排序——冒泡、选择、插入、奇偶排序
- java实现一个选择、冒泡、插入排序的简单演示器
- 选择排序实现及优化--python
- Java中实现简单的三大排序——冒泡、选择、插入
- 数据结构与算法之--简单排序:冒泡、选择和插入
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现