python 算法 排序实现快速排序


Posted in Python onJune 05, 2012

QUICKSORT(A, p, r)是快速排序的子程序,调用划分程序对数组进行划分,然后递归地调用QUICKSORT(A, p, r),以完成快速排序的过程。快速排序的最差时间复杂度为O(n2),平时时间复杂度为O(nlgn)。最差时间复杂度的情况为数组基本有序的时候,平均时间复杂度为数组的数值分布较为平均的时候。在平时情况下快速排序跟堆排序的时间复杂度都为O(nlgn),但是快速排序的常数项较小,所以要优于堆排序。
PARTITION(A, p, r)

x ← A[r] 
i ← p - 1 
for j ← p to r - 1 
do if A[j] ≤ x 
then i ← i + 1 
swap(A[i], A[j]) 
swap(A[i + 1], A[r]) 
return i + 1

QUICKSORT(A, p, r)
if p < r 
then q ← PARTITION(A, p, r) 
QUICKSORT(A, p, q - 1) 
QUICKSORT(A, q + 1, r)

实现:
#!/usr/bin/python 
import sys 
def partion(array, p, r): 
x = array[r] 
i = p - 1 
for j in range(p, r): 
if (array[j] < x): 
i+=1 
array[j], array[i] = array[i], array[j] 
i+=1 
array[i], array[r] = array[r], array[i] 
return i 
def quick_sort(array, p, r): 
if p < r: 
q = partion(array, p, r) 
quick_sort(array, p, q - 1) 
quick_sort(array, q + 1, r) 
if __name__ == "__main__": 
array = [1, 3, 5, 23, 64, 7, 23, 6, 34, 98, 100, 9] 
quick_sort(array, 0, len(array) - 1) 
for a in array: 
sys.stdout.write("%d " % a)
Python 相关文章推荐
使用python统计文件行数示例分享
Feb 21 Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
Python实现图像几何变换
Jul 06 Python
python版本的读写锁操作方法
Apr 25 Python
Python中的sort()方法使用基础教程
Jan 08 Python
Python中几种导入模块的方式总结
Apr 27 Python
python 换位密码算法的实例详解
Jul 19 Python
pyQt5实时刷新界面的示例
Jun 25 Python
python实现梯度下降和逻辑回归
Mar 24 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
Python基于内置函数type创建新类型
Oct 22 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python操作MySQL数据库的方法分享
May 29 #Python
python利用elaphe制作二维条形码实现代码
May 25 #Python
用python实现批量重命名文件的代码
May 25 #Python
删除目录下相同文件的python代码(逐级优化)
May 25 #Python
ssh批量登录并执行命令的python实现代码
May 25 #Python
巧用Python装饰器 免去调用父类构造函数的麻烦
May 18 #Python
Python使用Socket(Https)Post登录百度的实现代码
May 18 #Python
You might like
php 接口类与抽象类的实际作用
2009/11/26 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
python实现堆栈与队列的方法
2015/01/15 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
PyTorch预训练的实现
2019/09/18 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
正科级干部考察材料
2014/05/29 职场文书
装修公司管理制度
2015/08/05 职场文书
解析Java中的static关键字
2021/06/14 Java/Android