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


Posted in Python onOctober 25, 2019

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

说起快排的Python实现,首先谈一下,快速排序的思路:

1、取一个参考值放到列表中间,初次排序后,让左侧的值都比他小,右侧的值,都比他大。

2、分别对左侧和右侧的部分递归第1步的操作

实现思路:

  • 两个指针left,right分别指向列表的第一个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素list[0],称为K
  • 然后left指向的值先和参考值K进行比较,若list[left]小于或等于K值,left就一直向右移动,left+1,直到移动到大于K值的地方,停住
  • right指向的值和参考值K进行比较,若list[right]大于K值,right就一直向左移动,right-1,直到移动到小于K值的地方,停住
  • 此时,left和right若还没有相遇,即left还小于right,则二者指向的值互换
  • 若已经相遇则说明,第一次排序已经完成,将list[right]与list[0]的值进行互换,进行之后的递归

编程实现:

#快排的主函数,传入参数为一个列表,左右两端的下标
def QuickSort(list,low,high):
  if high > low:
    #传入参数,通过Partitions函数,获取k下标值
    k = Partitions(list,low,high)
    #递归排序列表k下标左侧的列表
    QuickSort(list,low,k-1)
    # 递归排序列表k下标右侧的列表
    QuickSort(list,k+1,high)
def Partitions(list,low,high):
  left = low
  right = high
  #将最左侧的值赋值给参考值k
  k = list[low]
  #当left下标,小于right下标的情况下,此时判断二者移动是否相交,若未相交,则一直循环
  while left < right :
    #当left对应的值小于k参考值,就一直向右移动
    while list[left] <= k:
      left += 1
    # 当right对应的值大于k参考值,就一直向左移动
    while list[right] > k:
      right = right - 1
    #若移动完,二者仍未相遇则交换下标对应的值
    if left < right:
      list[left],list[right] = list[right],list[left]
  #若移动完,已经相遇,则交换right对应的值和参考值
  list[low] = list[right]
  list[right] = k
  #返回k值
  return right
list_demo = [6,1,2,7,9,3,4,5,10,8]
print(list_demo)
QuickSort(list_demo,0,9)
print(list_demo)

运行结果:

[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Python 相关文章推荐
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
python读取word文档的方法
May 09 Python
python和ruby,我选谁?
Sep 13 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Django分页功能的实现代码详解
Jul 29 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python中threading开启关闭线程操作
May 02 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
python实现超市商品销售管理系统
Oct 25 #Python
Python列表元素常见操作简单示例
Oct 25 #Python
python实现超市管理系统(后台管理)
Oct 25 #Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 #Python
python+mysql实现个人论文管理系统
Oct 25 #Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 #Python
Python二元赋值实用技巧解析
Oct 25 #Python
You might like
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
validator验证控件使用代码
2010/11/23 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
原生JS实现层叠轮播图
2017/05/17 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
Python selenium如何设置等待时间
2016/09/15 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python下载微信公众号相关文章
2019/02/26 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
python中的对数log函数表示及用法
2020/12/09 Python
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
详解CocosCreator项目结构机制
2021/04/14 Javascript
redis 查看所有的key方式
2021/05/07 Redis
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS