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抢票回家过年(代码简单)
Jan 21 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
Python字符串及文本模式方法详解
Sep 10 Python
用Python 执行cmd命令
Dec 18 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
python实现过滤敏感词
May 08 Python
Python Parser的用法
May 12 Python
python通过opencv调用摄像头操作实例分析
Jun 07 Python
详解Python函数print用法
Jun 18 Python
Python使用pyecharts控件绘制图表
Jun 05 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使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Smarty变量用法详解
2016/05/11 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
javascript一些实用技巧小结
2011/03/18 Javascript
js常用代码段整理
2011/11/30 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
Python+django实现文件上传
2016/01/17 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
python实现XML解析的方法解析
2019/11/16 Python
python 命名规范知识点汇总
2020/02/14 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
幼儿园毕业寄语
2014/04/03 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
医院义诊活动总结
2014/07/04 职场文书
个人工作能力自我评价
2015/03/05 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
暑期家教宣传单
2015/07/14 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers