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发送各种形式的邮件的方法汇总
Nov 09 Python
Python实现全角半角字符互转的方法
Nov 28 Python
利用Python破解验证码实例详解
Dec 08 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
详解Python3注释知识点
Feb 19 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
Python机器学习之底层实现KNN
Jun 20 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
护理专业推荐信
2013/11/07 职场文书
狂人日记读书笔记
2015/06/30 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技