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模拟enum枚举类型的方法小结
Apr 30 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
OpenCV 模板匹配
Jul 10 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
wxPython色环电阻计算器
Nov 18 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
jupyter notebook实现显示行号
Apr 13 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
利用Python实现模拟登录知乎
May 25 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中用文本文件做数据库的实现方法
2008/03/27 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
快速处理vue渲染前的显示问题
2018/03/05 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python制作爬虫抓取美女图
2016/01/20 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
python爬取微信公众号文章的方法
2019/02/26 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
深入了解Python 变量作用域
2020/07/24 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
数据库面试要点基本概念
2013/10/31 面试题
社会实践的活动方案
2014/08/22 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
python微信智能AI机器人实现多种支付方式
2022/04/12 Python