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语言实现机器学习的K-近邻算法
Jun 11 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
Django 使用logging打印日志的实例
Apr 28 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
Django中的ajax请求
Oct 19 Python
python使用PyQt5的简单方法
Feb 27 Python
python字符串查找函数的用法详解
Jul 08 Python
Python lxml模块的基本使用方法分析
Dec 21 Python
python获取命令行参数实例方法讲解
Nov 02 Python
python import 上级目录的导入
Nov 03 Python
python 实现一个图形界面的汇率计算器
Nov 09 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
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
javascript 写类方式之十
2009/07/05 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
Javascript继承机制详解
2017/05/30 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
python实现自动网页截图并裁剪图片
2018/07/30 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
python使用selenium实现批量文件下载
2019/03/11 Python
python设置环境变量的作用整理
2020/02/17 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
师德先进个人事迹材料
2014/12/19 职场文书
检讨书范文大全
2015/05/07 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python