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中集合类型(set)学习小结
Jan 28 Python
python实现在sqlite动态创建表的方法
May 08 Python
python开发之list操作实例分析
Feb 22 Python
Python设计模式之抽象工厂模式
Aug 25 Python
你真的了解Python的random模块吗?
Dec 12 Python
Python3生成手写体数字方法
Jan 30 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python各层级目录下import方法代码实例
Jan 20 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
Python Matplotlib绘制动画的代码详解
May 30 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实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
广州某公司软件工程师面试题
2014/12/22 面试题
党员个人对照检查材料范文
2014/09/24 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书