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实现备份文件实例
Sep 16 Python
Python获取邮件地址的方法
Jul 10 Python
Python 数据结构之旋转链表
Feb 25 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
ipython和python区别详解
Jun 26 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
python中sympy库求常微分方程的用法
Apr 28 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
详解用Python把PDF转为Word方法总结
Apr 27 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实现Linux服务器木马排查及加固功能
2014/12/29 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
JS 实现微信扫一扫功能
2018/09/14 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
Python实现基于HTTP文件传输实例
2014/11/08 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
教师党员思想汇报
2014/01/06 职场文书
低碳环保标语
2014/06/12 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
长城的导游词
2015/01/30 职场文书
大连导游词
2015/02/12 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python