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制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
Python计算一个文件里字数的方法
Jun 15 Python
python基于phantomjs实现导入图片
May 13 Python
Python2随机数列生成器简单实例
Sep 04 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python实现多进程通信实例分析
Sep 01 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
PHP模块化安装教程
2016/06/01 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
JS中async/await实现异步调用的方法
2019/08/28 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python实现八大排序算法
2016/08/13 Python
Django的信号机制详解
2017/05/05 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
市场部专员岗位职责
2013/11/30 职场文书
物流合作计划书
2014/01/10 职场文书
中药学自荐信
2014/06/15 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Python基础之数据类型知识汇总
2021/05/18 Python
JavaScript中reduce()的用法
2022/05/11 Javascript