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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python正则捕获操作示例
Aug 19 Python
python读取excel表格生成erlang数据
Aug 26 Python
python多进程实现文件下载传输功能
Jul 28 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
python实现推箱子游戏
Mar 25 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
python中什么是面向对象
Jun 11 Python
Python自动登录QQ的实现示例
Aug 28 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
header导出Excel应用示例
2014/01/24 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
token 机制和实现方式
2020/12/15 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python进程间通信之共享内存详解
2017/10/30 Python
python GUI实例学习
2017/11/21 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
幼儿园中秋节活动方案2013
2014/01/29 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
工作所在部门证明
2014/09/21 职场文书
2014年工人工作总结
2014/11/25 职场文书
高中地理教学反思
2016/02/19 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫