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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
python实现在windows下操作word的方法
Apr 28 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
关于Python解包知识点总结
May 05 Python
python如何更新包
Jun 11 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
Python识别处理照片中的条形码
Nov 16 Python
python Scrapy框架原理解析
Jan 04 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
javascript调试说明
2010/06/07 Javascript
js输出列表实现代码
2010/09/12 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
koa源码中promise的解读
2018/11/13 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python中对数据进行各种排序的方法
2019/07/02 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
python属于哪种语言
2020/08/16 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
优秀教师先进事迹
2014/01/22 职场文书
校园运动会广播稿
2014/10/06 职场文书
流动人口婚育证明
2014/10/19 职场文书
学前班学生评语
2014/12/29 职场文书
写给父母的感谢信
2015/01/22 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书