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下利用OpenCV来旋转图像的教程
Apr 16 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
python 正确保留多位小数的实例
Jul 16 Python
python多进程控制学习小结
Oct 31 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
详解python中的模块及包导入
Aug 30 Python
Python3 合并二叉树的实现
Sep 30 Python
安装PyInstaller失败问题解决
Dec 14 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 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常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
python静态方法实例
2015/01/14 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
python中几种自动微分库解析
2019/08/29 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
日语专业个人的求职信
2013/12/03 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB