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批量提取word内信息
Aug 09 Python
TensorFlow saver指定变量的存取
Mar 10 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
详解python中list的使用
Mar 15 Python
Python Web框架之Django框架文件上传功能详解
Aug 16 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
pytorch 常用线性函数详解
Jan 15 Python
python实现的Iou与Giou代码
Jan 18 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
Python decimal模块使用方法详解
Jun 08 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
angular十大常见问题
2017/03/07 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue实现图片上传功能
2020/05/28 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Python中请不要再用re.compile了
2019/06/30 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
移动通信行业实习自我鉴定
2013/09/28 职场文书
开工典礼策划方案
2014/05/23 职场文书
学生实习证明范文
2014/09/28 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Python实现天气查询软件
2021/06/07 Python
解决 redis 无法远程连接
2022/05/15 Redis
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL