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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
在Python的web框架中编写创建日志的程序的教程
Apr 30 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
使用Template格式化Python字符串的方法
Jan 22 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
详解Python 循环嵌套
Jul 09 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Python实现聚类K-means算法详解
Jul 15 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
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
PHP创建XML接口示例
2019/07/04 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
通信专业个人自我鉴定
2013/10/21 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书