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 相关文章推荐
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
python对数组进行反转的方法
May 20 Python
Python中字典的基本知识初步介绍
May 21 Python
Python验证企业工商注册码
Oct 25 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
学生信息管理系统python版
Oct 17 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
django框架F&amp;Q 聚合与分组操作示例
Dec 12 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 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
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
10个php函数实用却不常见
2015/10/13 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
DOM事件探秘篇
2017/02/15 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
js数组的基本使用总结
2021/01/18 Javascript
Python3学习笔记之列表方法示例详解
2017/10/06 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
python日期相关操作实例小结
2019/06/24 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python 动态调用函数实例解析
2019/10/21 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python数据类型强制转换实例详解
2020/06/22 Python
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
小区文明倡议书
2014/05/16 职场文书
应届生求职自荐信
2014/07/04 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
特此通知格式
2015/04/27 职场文书
早会开场白台词大全
2015/06/01 职场文书
运动会广播稿300字
2015/08/19 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书