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中的递归函数
Apr 27 Python
python opencv之SIFT算法示例
Feb 24 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
Python 实现交换矩阵的行示例
Jun 26 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
python实现简单银行管理系统
Oct 25 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
用python发送微信消息
Dec 21 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
js 函数的副作用分析
2011/08/23 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
Python用GET方法上传文件
2015/03/10 Python
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python实现合并字典的方法
2015/07/07 Python
Python 类的继承实例详解
2017/03/25 Python
python中关于for循环的碎碎念
2017/06/30 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
大学生入党思想汇报
2014/01/14 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
我的长生果教学反思
2014/04/28 职场文书
项目建议书范文
2014/05/12 职场文书
体育口号大全
2014/06/18 职场文书
单位推荐信范文
2015/03/27 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书