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 27 Python
详解Python中的文件操作
Aug 28 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
python中几种自动微分库解析
Aug 29 Python
python递归下载文件夹下所有文件
Aug 31 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
用python爬虫批量下载pdf的实现
Dec 01 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python pass详细介绍及实例代码
2016/11/24 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
教师实习的自我鉴定
2013/10/26 职场文书
协议书的格式
2014/04/23 职场文书
学校读书活动总结
2014/06/30 职场文书