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实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
Python之list对应元素求和的方法
Jun 28 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python数据预处理方式 :数据降维
Feb 24 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 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安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php curl_init函数用法
2014/01/31 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
婚礼证婚人证婚词
2014/01/08 职场文书
团日活动总结书格式
2014/05/08 职场文书
交通事故委托书范本
2014/09/28 职场文书
学籍证明模板
2015/06/18 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS