python递归实现快速排序


Posted in Python onAugust 18, 2018

快速排序(QuickSort)是对冒泡排序的一种改进:

基本思想:

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序

过程可以递归进行,以此达到整个数据变成有序序列。

一趟快速排序的算法是:

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,

进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

利用python实现的快速排序代码quick_sort.py如下:

def sub_sort(array,low,high):
  pivotkey=array[low]
  while low<high :
    while low<high and array[high]>=pivotkey:
      high -= 1
    array[low]=array[high]
    while low<high and array[low]<=pivotkey:
      low += 1
    array[high]=array[low]
  array[low]=pivotkey
  return low
 
def quick_sort(array,low,high):
  if low < high :
    pivoloc=sub_sort(array,low,high)
    quick_sort(array,low,pivoloc-1)
    quick_sort(array,pivoloc+1,high)
 
if __name__=="__main__": 
  array=[49,38,65,97,76,13,27]
  print array
  quick_sort(array,0,len(array)-1)
  print array

对一个数组array=[49, 38, 65, 97, 76, 13, 27]进行快速排序,得到的结果如下所示:

=============== RESTART: I:\python_DataStructure\quick_sort.py ===============
[49, 38, 65, 97, 76, 13, 27]
[13, 27, 38, 49, 65, 76, 97]
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 基础学习第二弹 类属性和实例属性
Aug 27 Python
Python文件操作类操作实例详解
Jul 11 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
python rsa 加密解密
Mar 20 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
python 获取等间隔的数组实例
Jul 04 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
用Python创建简易网站图文教程
Jun 11 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 #Python
python递归全排列实现方法
Aug 18 #Python
python使用PIL给图片添加文字生成海报示例
Aug 17 #Python
Python在for循环中更改list值的方法【推荐】
Aug 17 #Python
Python简单读写Xls格式文档的方法示例
Aug 17 #Python
Python实现的连接mssql数据库操作示例
Aug 17 #Python
Python SQL查询并生成json文件操作示例
Aug 17 #Python
You might like
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
Python计算三维矢量幅度的方法
2015/06/15 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
史上最全面的Java面试题汇总!
2015/02/03 面试题
求职简历中个人的自我评价
2013/12/01 职场文书
暑期社会实践方案
2014/02/05 职场文书
项目合作意向书模板
2014/07/29 职场文书
防灾减灾活动总结
2014/08/30 职场文书
大明湖导游词
2015/02/03 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers