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实现目录树生成示例
Mar 28 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
python中的计时器timeit的使用方法
Oct 20 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
Python模块future用法原理详解
Jan 20 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 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在线打包程序源码
2008/07/27 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
微信小程序websocket实现聊天功能
2020/03/30 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
Python之os操作方法(详解)
2017/06/15 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
Python玩转Excel的读写改实例
2019/02/22 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
MySQL一些常用高级SQL语句
2021/07/03 MySQL
一文带你探究MySQL中的NULL
2021/11/11 MySQL
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers