一、学习要点:
解决问题的思路:
根据分治思想设计程序时的思维过程:
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. python栈溢出_Python栈溢出【新手必学】
  2. wireshark 选择网络接口
  3. restful api与传统api的区别(方式及语法)
  4. linux之Vim用快捷键快速移动光标至行首和行尾
  5. * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;
  6. 编解码标准H264 与 AVS 变换矩阵比较
  7. Alibaba Druid未授权访问漏洞记录(敏感目录,端口:不确定)
  8. 唐山职业技术学院计算机专业分数线,唐山职业技术学院历年分数线 2021唐山职业技术学院录取分数线...
  9. Codeforces 797B - Odd sum
  10. C#图像细化:Hilditch细化算法
  11. Postgres数据库报错:FATAL: Peer authentication failed for user “zabbix“ Previous connection kept
  12. java类型转换方法_Java中基本数据类型转换的方法
  13. 8086+8255A写数码管Proteus仿真及8086Proteus仿真问题
  14. 无线路由器破解之cdlinux
  15. Linux检测ip变动
  16. matlab自带的优化工具箱,MATLAB 自带优化工具箱(optimization Tool)之遗传算法简述...
  17. jquery获取第一个子元素
  18. 软件或网站(学习 工作 生活)
  19. 物联网平台教育培训探讨
  20. 漫游法国蔚蓝海岸 法式浪漫激情之旅

热门文章

  1. boost::mp11::mp_clear相关用法的测试程序
  2. boost::geometry::strategy::within::franklin用法的测试程序
  3. boost::tuple用法的测试程序
  4. boost::geometry::concepts::check用法的测试程序
  5. boost::fusion::result_of::size用法的测试程序
  6. boost::fusion::fused_procedure用法的测试程序
  7. Boost::context模块fiber的throw测试程序
  8. ITK:减去两个图像
  9. VTK:Math之MatrixTranspose
  10. QDoc C ++特定的配置变量