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 open读写文件实现脚本
Sep 06 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
Python批量查询域名是否被注册过
Jun 21 Python
pycharm设置注释颜色的方法
May 23 Python
python绘制圆柱体的方法
Jul 02 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP个人网站架设连环讲(四)
2006/10/09 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
Python pickle模块用法实例分析
2015/05/27 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python实现二叉查找树实例代码
2018/02/08 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
python数组循环处理方法
2019/08/26 Python
基于python实现坦克大战游戏
2020/10/27 Python
python爬取代理ip的示例
2020/12/18 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
为什么会有内存对齐
2016/10/10 面试题
工作中个人的自我评价
2013/12/31 职场文书
软件售后服务方案
2014/05/29 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android