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 28 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
Python带动态参数功能的sqlite工具类
May 26 Python
python 反向输出字符串的方法
Jul 16 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
python 实现A*算法的示例代码
Aug 13 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
Dec 27 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
Python中random模块常用方法的使用教程
Oct 04 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 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扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
PHP小技巧之函数重载
2014/06/02 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
基于JQuery的cookie插件
2010/04/07 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
介绍Python中的fabs()方法的使用
2015/05/14 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Python OpenCV实现视频分帧
2019/06/01 Python
深入了解Django中间件及其方法
2019/07/26 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
办公室综合文员岗位职责范本
2014/02/13 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
社区义诊活动总结
2014/04/30 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书