视觉直观感受若干常用排序算法


Posted in Python onApril 13, 2017

直观感受几种常用排序算法,具体内容如下

1 快速排序

介绍:

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

从数列中挑出一个元素,称为 "基准"(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

排序效果:

视觉直观感受若干常用排序算法

2 归并排序

介绍:

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用

步骤:

申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
设定两个指针,最初位置分别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾

排序效果:

 视觉直观感受若干常用排序算法

3 堆排序

介绍:

堆积排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

步骤:

(比较复杂,自己上网查吧)

排序效果:

视觉直观感受若干常用排序算法

4 选择排序

介绍:

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

排序效果:

视觉直观感受若干常用排序算法

5 冒泡排序

介绍:

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

步骤:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

排序效果:

视觉直观感受若干常用排序算法

6 插入排序

介绍:

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤:

从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置中
重复步骤2 

7 希尔排序

介绍:

希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位

排序效果:

视觉直观感受若干常用排序算法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python中的一些高级编程技巧
Apr 02 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
用Python实现KNN分类算法
Dec 22 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
python文件选择对话框的操作方法
Jun 27 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
pytorch之添加BN的实现
Jan 06 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
python常见排序算法基础教程
Apr 13 #Python
python编程实现希尔排序
Apr 13 #Python
python实现解数独程序代码
Apr 12 #Python
python访问抓取网页常用命令总结
Apr 11 #Python
Python 登录网站详解及实例
Apr 11 #Python
python实现FTP服务器服务的方法
Apr 11 #Python
python读写json文件的简单实现
Apr 11 #Python
You might like
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
10个Python小技巧你值得拥有
2018/09/29 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
塔吉特百货公司官网:Target
2017/04/27 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
《庐山的云雾》教学反思
2014/04/22 职场文书
防火标语大全
2014/10/06 职场文书
股份转让协议书范本
2015/01/27 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
python 离散点图画法的实现
2022/04/01 Python