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 相关文章推荐
Django REST为文件属性输出完整URL的方法
Dec 18 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
Python中logging实例讲解
Jan 17 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
django基于restframework的CBV封装详解
Aug 08 Python
浅谈pycharm使用及设置方法
Sep 09 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
python3处理word文档实例分析
Dec 01 Python
利用python进行文件操作
Dec 04 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
将PHP作为Shell脚本语言使用
2006/10/09 PHP
如何分别全角和半角以避免乱码
2006/10/09 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
Python 字符串换行的多种方式
2018/09/06 Python
python http基本验证方法
2018/12/26 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
python构造函数init实例方法解析
2020/01/19 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
虚拟机下载python是否需要联网
2020/07/27 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
新员工欢迎词
2014/01/12 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书