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 文件和输入输出小结
Oct 09 Python
Python中的自定义函数学习笔记
Sep 23 Python
Python闭包实现计数器的方法
May 05 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
在python shell中运行python文件的实现
Dec 21 Python
用python解压分析jar包实例
Jan 16 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
python import 上级目录的导入
Nov 03 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
Python的scikit-image模块实例讲解
Dec 30 Python
Python中的socket网络模块介绍
Jul 23 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读取数据库信息的几种方法
2008/05/24 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python实现单词翻译功能
2017/06/06 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
文秘人员工作职责
2014/01/31 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
师德模范事迹材料
2014/06/03 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
公司安全管理制度范本
2015/08/05 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android