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中for语句简单遍历数据的方法
May 07 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python实现求数列和的方法示例
Jan 12 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
Python使用OpenCV进行标定
May 08 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
PHP的FTP学习(一)
2006/10/09 PHP
php cout&amp;lt;&amp;lt;的一点看法
2010/01/24 PHP
PHP获取文件行数的方法
2015/06/10 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
javascript一点特殊用法
2008/05/28 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
中学实习教师自我鉴定
2013/12/12 职场文书
大学生职业规划论文
2014/01/11 职场文书
数学系个人求职信范文
2014/01/30 职场文书
营销总经理岗位职责
2014/02/02 职场文书
小学老师寄语大全
2014/04/04 职场文书
学习雷锋倡议书
2014/04/15 职场文书
投标诚信承诺书
2014/05/26 职场文书
开服装店计划书
2014/08/15 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书