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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
详解Swift中属性的声明与作用
Jun 30 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
Python中字典与恒等运算符的用法分析
Aug 22 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
python怎么判断模块安装完成
Jun 19 Python
python如何构建mock接口服务
Jan 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
php以post形式发送xml的方法
2014/11/04 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
介绍Python中的一些高级编程技巧
2015/04/02 Python
python版简单工厂模式
2017/10/16 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
python 操作hive pyhs2方式
2019/12/21 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
印度网上药店:1mg
2017/10/13 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
班组长岗位职责范本
2014/01/05 职场文书
优秀幼教自荐信
2014/02/03 职场文书
合作协议书
2014/04/23 职场文书
前台岗位职责范本
2015/04/16 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书