归并排序python实现

归并排序

归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法

首先是一个例子

原序先通过一半一半的拆分,然后:

然后再一步一步的向上合并,在合并的过程中完成了排序,合并排序算法如下:


def merge(s1,s2,s):"""将两个列表是s1,s2按顺序融合为一个列表s,s为原列表"""# j和i就相当于两个指向的位置,i指s1,j指s2i = j = 0while i+j<len(s):# j==len(s2)时说明s2走完了,或者s1没走完并且s1中该位置是最小的if j==len(s2) or (i<len(s1) and s1[i]<s2[j]):s[i+j] = s1[i]i += 1else:s[i+j] = s2[j]j += 1

这是以列表为例,道理其实很简单,因为两个序列是排好序的,所以都从左往右,互相比较选择较小的那个数放入最后的序列,s是原序列,所以在一开始会有与len(s)的比较

完整算法

算法中通过递归并调用merge函数完成排序


def merge(s1,s2,s):"""将两个列表是s1,s2按顺序融合为一个列表s,s为原列表"""# j和i就相当于两个指向的位置,i指s1,j指s2i = j = 0while i+j<len(s):# j==len(s2)时说明s2走完了,或者s1没走完并且s1中该位置是最小的if j==len(s2) or (i<len(s1) and s1[i]<s2[j]):s[i+j] = s1[i]i += 1else:s[i+j] = s2[j]j += 1def merge_sort(s):"""归并排序"""n = len(s)# 剩一个或没有直接返回,不用排序if n < 2:return# 拆分mid = n // 2s1 = s[0:mid]s2 = s[mid:n]# 子序列递归调用排序merge_sort(s1)merge_sort(s2)# 合并merge(s1,s2,s)if __name__ == '__main__':s = [1,7,3,5,4]merge_sort(s)print(s)

时间复杂度

还拿这个图说

这个图显然是二叉树的形式,所以若集合有n个元素,那高度就为log(n)

但其实在每一层做比较的时候,都是一个一个的向序列中放小的元素,每一层都是要放n次

所以时间复杂度为nlog(n)

转载于:https://www.cnblogs.com/sfencs-hcy/p/10600197.html

归并排序python实现相关推荐

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

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

  2. 归并排序Python代码

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

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

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

  4. 二路归并排序——python

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

  5. 归并排序-python

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

  6. 归并排序(Python代码)

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

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

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

  8. python归并排序_python归并排序

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

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

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

最新文章

  1. Linux启动检测内存条错误,linux检测程序内存泄漏和内存错误
  2. R包dplyr进行数据清洗和整理
  3. STM32处理器存储空间布局解析
  4. Jquery的集合方法EACH()
  5. python根据一个基类生成派生类_将基类转换为派生类python(或者更像pythonic的扩展类的方式)...
  6. 深度学习网络调试技巧
  7. window10使用 Hyper-V 创建ubuntu虚拟机并使用增强会话功能
  8. [flask]gunicorn配置文件
  9. 暑训day1解题报告
  10. Android系统对话框
  11. 服务器系统咋关机呀,各种服务器系统的关机
  12. 【渝粤教育】电大中专电子商务网站建设与维护 (13)作业 题库
  13. mysql内部联结_关于mysql的内部联结
  14. jsp案例分析(二)-聊天室-2-逆向建模
  15. SVN报错Skipped ‘xxxController.class.php‘ -- Node remains in conflict
  16. 永远不会被杀毒软件查杀的木马捆绑机
  17. python javascript区别_Python,Java和JavaScript这3个编程语言未来哪个更有前景?
  18. 英特尔hd630驱动,intel hd graphics 630驅動
  19. Docker | 基于docker安装Redis
  20. 互联网赚钱:普通人月入上万的秘密,连载4

热门文章

  1. Redis分布式锁问题
  2. 记一次kafka集群频繁crash的排查过程
  3. php mysql 学习周期_学习PHPMYSQL到目前为止 所有的区别特点
  4. python小工具自动审单录凭证_跟着老板工作了二十年,最近来了个新员工然后我被开除了...
  5. 从未来所思考到的事情
  6. windows复制文件到 vmware centos虚拟机问题
  7. php,js端获取sessionid的方法
  8. ZooKeeper 3.4.5 分布式环境搭建
  9. input属性disabled和readonly的区别
  10. Laravel同时接收路由参数和查询字符串中的参数