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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Django中URLconf和include()的协同工作方法
Jul 20 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
python实现单向链表详解
Feb 08 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
python3.6使用SMTP协议发送邮件
May 20 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
一行代码python实现文件共享服务器
Apr 22 Python
python批量创建变量并赋值操作
Jun 03 Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 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
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
js 三级关联菜单效果实例
2013/08/13 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python 三元运算符使用解析
2019/09/16 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
Python try except else使用详解
2021/01/12 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
最热门的自我评价
2013/12/30 职场文书
户外拓展活动方案
2014/02/11 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
Redis的字符串是如何实现的
2021/10/24 Redis
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技