一、学习要点:
解决问题的思路:
根据分治思想设计程序时的思维过程:
1.一定是先找到最小问题规模时的求解方法
2.然后考虑随着问题规模增大时的求解方法
3.找到求解过程的递归函数式后,设计递归程序即可
demo 分析:
seq=[5,3,2,0,1,4]
1.首先找到最小规模时的求解方法:
当列表中只有一个元素的时候,就是最小规模。
如:
left=[5],right=[3]
将两个列表合并成一个有序的列表:
result=[]
if left[0]<=right[0]:
result.append(left[0])
else:
result.append(right[0])
result+=left此时 合并后的列表 result=[3,5]就是排序好的列表。
2.规模扩大
left=[0,3,5] right=[1,4]
将两个有序列表,合并成一个有序列表:
比较二个列表的第一个数,谁小就先取谁,取了后就在对应的列表中跳过这个数。然后再进行比较,如果有空,那就将另一个列表的数据依次取出即可:
result=[]
i=0
j=0
while i<len(left) and j<len(right):
if left[i]<=right[j]:
result.append(left[i])
i+=1
else:
result.append(right[j])
j+=1
result+=left[i:]
result+=right[j:]
3.设计递归,将复杂的问题分解为最小规模子问题。
二、代码:

def mergesort(seq):"""归并排序"""if len(seq) <= 1:return seqmid = len(seq) / 2  # 将列表分成更小的两个列表# 分别对左右两个列表进行处理,分别返回两个排序好的列表left = mergesort(seq[:mid])right = mergesort(seq[mid:])# 对排序好的两个列表合并,产生一个新的排序好的列表return merge(left, right)def merge(left, right):"""合并两个已排序好的列表,产生一个新的已排序好的列表"""result = []  # 新的已排序好的列表i = 0  # 下标j = 0# 对两个列表中的元素 两两对比。# 将最小的元素,放到result中,并对当前列表下标加1while i < len(left) and j < len(right):if left[i] <= right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result += left[i:]result += right[j:]return resultseq = [5,3,0,6,1,4]
print '排序前:',seq
result = mergesort(seq)
print '排序后:',result```三、运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190502214305470.png)
四:如看不懂,参考原博客:
https://www.jianshu.com/p/3ad5373465fd

归并排序(python实现)相关推荐

  1. 归并排序python实现

    归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...

  2. 二路归并排序Python实现-III

    二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...

  3. 归并排序Python代码

    归并排序是面试最常考内容, 让你描述算法, 让你写算法, 让你分析时间复杂度 归并排序merge sort思路: 归并排序中间劈一刀,数组分两半,两边排好序,最后把左右两个合并.就是先局部有序,再整体 ...

  4. 算法--分治法归并排序 python

    设计算法 我们可以选择使用的算法设计方法有很多,插入排序使用了增量方法:在排序子数组A[1-j-1]后,将单个元素A[ j ]插入子数组的适当位置,产生排序好的子数组A[1-j]. 而这次我们将考查另 ...

  5. 二路归并排序——python

    from __future__ import print_functiondef merge_sort(collection):"""二路归并排序(稳定排序),结果升序算 ...

  6. 归并排序-python

    归并排序 归并排序是采用分治法的一个非常典型的应用.归并排序的思想就是先递归分解数组,再合并数组. 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相 ...

  7. 归并排序(Python代码)

    1.归排序 归并排序用的是分治法,把一个大问题化解为k个中问题,每个中问题再化解为k个小问题,直至问题化为最小可解的问题.对这些问题求解,再不断地合并结果,直至合并完毕. 如下图: 注意: 合并方法, ...

  8. 快速排序和归并排序的区别,Python代码实现

    排序理念比较: 归并排序merge sort思路: 归并排序中间劈一刀,两边再排序,然后把左右两个合并.就是先局部有序,再整体有序. 快速排序思路: 随便选择一个数字作为中间点,小于放在左边,大于放在 ...

  9. python归并排序_python归并排序

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python写归并排序 开始今天内容之前,先给大家推荐一款审核利器,goince ...

  10. python算法系列资料集(一)-2022.03.15

    小学生学python(一) 小学生学python(一) - 超龄码农 - 博客园 小学生学python(二) 小学生学python(二) - 超龄码农 - 博客园 小学生学python(三) 小学生学 ...

最新文章

  1. php监听input,jQuery如何实时监听获取input输入框的值
  2. 大数据时代 如何让用户上网更放心
  3. 线性期望(BUPT2015校赛.F)
  4. QT中DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80040216 ()问题的解决
  5. 【文献阅读】Perceptual Generative Adversarial Networks for Small Object Detection –CVPR-2017
  6. linux+echo+权限不够,解决linux echo命令以及linux echo命令提示权限不够的方法
  7. 题解 【NOIP2010】关押罪犯
  8. spark 类别特征_spark 机器学习基础 数据类型
  9. 高通工具过滤_高通QXDM|高通诊断监视工具(Qualcomm QXDM)下载v3.14 官方版 - 欧普软件下载...
  10. 分布式系统阅读笔记(十九)-----移动计算和无处不在的计算
  11. 输出大于某个正整数n的最小质数(1除外
  12. 逆火软件测试工资,逆火刷机软件介绍和软件使用说明
  13. win10家庭版 mysql_MySQL下载安装详解(win10家庭版)
  14. [乐意黎转载]从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
  15. python语言的实验心得体会范文_实验心得体会四篇
  16. PHP支付宝转账到支付宝账号/支付(公钥证书方式)
  17. Python环境搭建指南
  18. OpenCV摄像头-截图
  19. win10 redis集群搭建 ruby
  20. FTX创办人SBF:区块链并不是炒作,有三大应用场景可大放异彩

热门文章

  1. boost::coroutine模块实现layout的测试程序
  2. Boost:自定义小矢量的测试程序
  3. ITK:在图像中查找连接的组件
  4. VTK:PolyData之SmoothPolyDataFilter
  5. OpenCV使用蒙版mask过滤图像的实例(附完整代码)
  6. Clojure开发OpenCV的简介
  7. c++判断一个数字是否为buzz number的算法(附完整源码)
  8. QT的QParameter类的使用
  9. QT的QPicture类的使用
  10. QT的QModbusResponse类的使用