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编程实现语音控制电脑
Apr 01 Python
使用graphics.py实现2048小游戏
Mar 10 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
python定时器(Timer)用法简单实例
Jun 04 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
python如何生成各种随机分布图
Aug 27 Python
对python函数签名的方法详解
Jan 22 Python
Python判断有效的数独算法示例
Feb 23 Python
Python实现京东秒杀功能代码
May 16 Python
python中温度单位转换的实例方法
Dec 27 Python
浅析pandas随机排列与随机抽样
Jan 22 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
cache_lite试用
2007/02/14 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
javascript 节点排序 2
2011/01/31 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
关于工资低的辞职信
2014/01/14 职场文书
社会实践活动总结报告
2014/04/29 职场文书
数控机床专业自荐信
2014/05/19 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
美术教师求职信范文
2015/03/20 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
MySQL创建管理HASH分区
2022/04/13 MySQL