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实现获取磁盘剩余空间的2种方法
Jun 07 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python解析含有重复key的json方法
Jan 22 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
PyCharm如何导入python项目的方法
Feb 06 Python
python识别验证码图片实例详解
Feb 17 Python
基于Python fminunc 的替代方法
Feb 29 Python
python异步Web框架sanic的实现
Apr 27 Python
Python 如何调试程序崩溃错误
Aug 03 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
PHP echo()函数讲解
2019/02/15 PHP
Egret引擎开发指南之运行项目
2014/09/03 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
python字典与json转换的方法总结
2020/12/28 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
学习心得体会
2014/01/01 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
用JS实现飞机大战小游戏
2021/06/09 Javascript
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电