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的Flask框架中实现单元测试的教程
Apr 20 Python
python创建和删除目录的方法
Apr 29 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
Python中import机制详解
Nov 14 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
python实现批量修改文件名
Mar 23 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
如何正确理解python装饰器
Jun 15 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
解析link_mysql的php版
2013/06/30 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
python入门教程之识别验证码
2017/03/04 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
python实现猜数游戏
2020/03/27 Python
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
家长对孩子的评语
2014/04/18 职场文书
企业管理标语
2014/06/10 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript