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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python NumPy库安装使用笔记
May 18 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
Python变量和字符串详解
Apr 29 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
golang/python实现归并排序实例代码
Aug 30 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
python+playwright微软自动化工具的使用
Feb 02 Python
python办公自动化之excel的操作
May 23 Python
python的变量和简单数字类型详解
Sep 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
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
Javascript中Eval函数的使用
2010/03/23 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
Python判断字符串与大小写转换
2015/06/08 Python
详解python之简单主机批量管理工具
2017/01/27 Python
python使用Tesseract库识别验证
2018/03/21 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
好人好事事迹材料
2014/02/12 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
大二学生自我检讨书
2014/10/23 职场文书
2014年度考核工作总结
2014/12/24 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python