Python实现的快速排序算法详解


Posted in Python onAugust 01, 2017

本文实例讲述了Python实现的快速排序算法。分享给大家供大家参考,具体如下:

快速排序基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

如序列[6,8,1,4,3,9],选择6作为基准数。从右向左扫描,寻找比基准数小的数字为3,交换6和3的位置,[3,8,1,4,6,9],接着从左向右扫描,寻找比基准数大的数字为8,交换6和8的位置,[3,6,1,4,8,9]。重复上述过程,直到基准数左边的数字都比其小,右边的数字都比其大。然后分别对基准数左边和右边的序列递归进行上述方法。

实现代码如下:

def parttion(v, left, right):
  key = v[left]
  low = left
  high = right
  while low < high:
    while (low < high) and (v[high] >= key):
      high -= 1
    v[low] = v[high]
    while (low < high) and (v[low] <= key):
      low += 1
    v[high] = v[low]
    v[low] = key
  return low
def quicksort(v, left, right):
  if left < right:
    p = parttion(v, left, right)
    quicksort(v, left, p-1)
    quicksort(v, p+1, right)
  return v
s = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
print("before sort:",s)
s1 = quicksort(s, left = 0, right = len(s) - 1)
print("after sort:",s1)

运行结果:

before sort: [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
after sort: [1, 2, 2, 3, 4, 4, 5, 6, 6, 8, 9, 11, 15]

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 多线程应用介绍
Dec 19 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python实现多属性排序的方法
Dec 05 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
Python模块的制作方法实例分析
Dec 21 Python
解决paramiko执行命令超时的问题
Apr 16 Python
用python实现一个简单的验证码
Dec 09 Python
python+selenium实现12306模拟登录的步骤
Jan 21 Python
Python实现的弹球小游戏示例
Aug 01 #Python
Python的mysql数据库的更新如何实现
Jul 31 #Python
Python操作csv文件实例详解
Jul 31 #Python
Python实现字典去除重复的方法示例
Jul 31 #Python
浅析使用Python操作文件
Jul 31 #Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 #Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 #Python
You might like
获取远程文件大小的php函数
2010/01/11 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
Python异常处理总结
2014/08/15 Python
Python入门篇之字典
2014/10/17 Python
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
pytorch简介
2020/11/11 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
民族学专业求职信
2014/07/28 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
三八妇女节致辞
2015/07/31 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
如何正确理解python装饰器
2021/06/15 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
python获取带有返回值的多线程
2022/05/02 Python