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实现telnet客户端的方法
Apr 15 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
python实现动态数组的示例代码
Jul 15 Python
适合Python初学者的一些编程技巧
Feb 12 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
Jmeter调用Python脚本实现参数互相传递的实现
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
十天学会php之第八天
2006/10/09 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
Python的互斥锁与信号量详解
2019/09/12 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
中学生自我鉴定
2014/02/04 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2014年科普工作总结
2014/12/06 职场文书
人事任命通知
2015/04/20 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android