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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
使用Python下的XSLT API进行web开发的简单教程
Apr 15 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
Django中的Signal代码详解
Feb 05 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
python可视化实现代码
Jan 15 Python
Python Flask框架模板操作实例分析
May 03 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
使用keras根据层名称来初始化网络
May 21 Python
Python自动化爬取天眼查数据的实现
Jun 15 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中把对象数组转换成普通数组的方法
2015/07/10 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
javascript之Partial Application学习
2013/01/10 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
python实现简单温度转换的方法
2015/03/13 Python
Python的pycurl包用法简介
2015/11/13 Python
python文件操作相关知识点总结整理
2016/02/22 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python、Matlab求定积分的实现
2019/11/20 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
外贸英语毕业生自荐信
2013/11/14 职场文书
安全标准化汇报材料
2014/02/03 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
班主任评语大全
2014/04/26 职场文书
政治学求职信
2014/06/03 职场文书
霸气队列口号
2014/06/18 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python