首页 >

python编程实现归并排序办法介绍

后端开发|Python教程python编程实现归并排序办法介绍
python,归并排序
后端开发-Python教程
这篇文章主要为大家详细介绍了python编程实现归并排序的具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
jspgou 源码,vscode编写c 动态库,ubuntu没显卡,tomcat移除管理页面,爬虫代码 .net,php执行命令行,天门产品seo推广多少钱,平台建站和源码网站哪个好,yourphp免费模板lzw
因为上个星期leetcode的一道题(Median of Two Sorted Arrays)所以想仔细了解一下归并排序的实现。
主机评测网源码,xp系统vscode,ubuntu改造,tomcat新建html,发票sqlite.dll,手机菜单插件,目前流行的前端css框架,爬虫爬取学校标题,php连接变量,卫浴seo团队,饮水机企业网站模板,excel 获取网页源代码,织梦 bootstrap模板lzw
还是先阐述一下排序思路:
平台源码转让,vscode怎么安装git,ubuntu传东西,tomcat部署项目在哪,sqlite数据库id自增,大数据分析师要学习爬虫吗,lnmp php 重启,店铺seo优化分类,免费网站模板 html,免费企业网站模板psdlzw
首先归并排序使用了二分法,归根到底的思想还是分而治之。拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。然后再将她们按照两个有序数组的样子合并起来。这样说起来可能很难理解,于是给出一张我画的图。

python编程实现归并排序办法介绍

这里显示了归并排序的第一步,将数组按照middle进行递归拆分,最后分到最细之后再将其使用对两个有序数组进行排序的方法对其进行排序。

两个有序数组排序的方法则非常简单,同时对两个数组的第一个位置进行比大小,将小的放入一个空数组,然后被放入空数组的那个位置的指针往后 移一个,然后继续和另外一个数组的上一个位置进行比较,以此类推。到最后任何一个数组先出栈完,就将另外i一个数组里的所有元素追加到新数组后面。

由于递归拆分的时间复杂度是logN 然而,进行两个有序数组排序的方法复杂度是N该算法的时间复杂度是N*logN 所以是NlogN。

根据这波分析,我们可以看看对上图的一个行为。

当最左边的分到最细之后无法再划分左右然后开始进行合并。

第一次组合完成[4, 7]的合并

第二次组合完成[4, 7, 8]的合并

第三次组合完成[3, 5]的合并

第四次组合完成[3, 5, 9]的合并

第五次组合完成[3, 4, 5, 7, 8, 9]的合并结束排序。

下面放上python的代码

def merge(a, b): c = [] h = j = 0 while j < len(a) and h < len(b):  if a[j] < b[h]:   c.append(a[j])   j += 1  else:   c.append(b[h])   h += 1 if j == len(a):  for i in b[h:]:   c.append(i) else:  for i in a[j:]:   c.append(i) return cdef merge_sort(lists): if len(lists) <= 1:  return lists middle = len(lists)/2 left = merge_sort(lists[:middle]) right = merge_sort(lists[middle:]) return merge(left, right)if name == 'main': a = [4, 7, 8, 3, 5, 9] print merge_sort(a)

python编程实现归并排序办法介绍
  • 什么是归并排序?Java实现归并排序详解
  • 什么是归并排序?Java实现归并排序详解 | 什么是归并排序?Java实现归并排序详解 ...

    python编程实现归并排序办法介绍
  • 通常Java开发人员如何进行数据排序? - 网络|
  • 通常Java开发人员如何进行数据排序? - 网络| | 通常Java开发人员如何进行数据排序? - 网络| ...

    python编程实现归并排序办法介绍
  • JavaScript算法之归并排序算法(详解)
  • JavaScript算法之归并排序算法(详解) | JavaScript算法之归并排序算法(详解) ...