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的print用法示例
Feb 11 Python
python append、extend与insert的区别
Oct 13 Python
利用python写个下载teahour音频的小脚本
May 08 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python+pyqt5实现24点小游戏
Jan 24 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
django中嵌套的try-except实例
May 21 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python办公自动化之excel的操作
May 23 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/03/10 日漫
PHP循环获取GET和POST值的代码
2008/04/09 PHP
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
培养自己的php编码规范
2015/09/28 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
JS 实现导航栏悬停效果
2013/09/23 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
Python字符串中查找子串小技巧
2015/04/10 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
python字典key不能是可以是啥类型
2020/08/04 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
Linux的文件类型
2016/07/05 面试题
介绍一下JMS编程步骤
2015/09/22 面试题
计算机专业求职信
2014/06/02 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
会计稽核岗位职责
2015/04/13 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang