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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
Selenium元素的常用操作方法分析
Aug 10 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
python对象转字典的两种实现方式示例
Nov 07 Python
python实现用户名密码校验
Mar 18 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
详解Pandas 处理缺失值指令大全
Jul 30 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 session常见问题集锦及解决办法总结
2007/03/18 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP调用其他文件中的类
2018/04/02 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
Python出现segfault错误解决方法
2016/04/16 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
教师批评与自我批评心得体会
2014/10/16 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
中秋节随笔
2015/08/15 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
把77A收信机改造成收音机
2022/04/05 无线电
Python软件包安装的三种常见方法
2022/07/07 Python