--- 归并排序 ---1. 分解:将列表越分越小,直至分成一个元素2. 终止条件:一个元素是有序的3. 合并:将两个有序列表归并,列表越来越大缺点:需要额外的内存开销
def merge(li, low, mid, high):"""归并两个有序列表:param li: 列表:param low: 列表1开头:param mid: 列表1末尾:param high: 列表2末尾:return:"""# 从 low 开始,而非 0,因为后面可能有递归i = lowj = mid + 1temp = []# 只要左右两边都有数,比较两边指向的数while i <= mid and j <= high:if li[i] < li[j]:temp.append(li[i])i += 1else:temp.append(li[j])j += 1# while 执行完,肯定有一部分没数了while i <= mid:temp.append(li[i])i += 1while j <= high:temp.append(li[j])j += 1li[low:high + 1] = tempreturn lili = [2,4,5,7,1,3,6,8]
merge(li, 0, 3, 7)
print(li)def merge_sort(li, low, high):# 至少有两个元素,递归if low < high:mid = (low + high) // 2merge_sort(li, low, mid)merge_sort(li, mid + 1, high)merge(li, low, mid, high)

1.10_merge_sort_归并排序相关推荐

  1. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  2. LightHouse/归并排序

    灯塔(LightHouse) 题目见https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1144 最近复习DSA,便在看邓老师的mooc,顺便做做配套 ...

  3. 归并排序(代码注释超详细)

    归并排序: (复制粘贴百度百科没什么意思),简单来说,就是对数组进行分组,然后分组进行排序,排序完最后再整合起来排序! 我看了很多博客,都是写的8个数据呀什么的(2^4,分组方便),我就想着,要是10 ...

  4. 递归/分治:归并排序

    前言 分治算法: 将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出 子问题的解后进行合并,就可得到原问题的解. 步骤如下: 分解,将要解决的问题划分成若 干规 ...

  5. C语言 带比较器的归并排序

    1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int DataType; 5 6 //比较器 7 int myc ...

  6. (C++)归并排序的递归与非递归实现

    递归实现 merge函数利用的是双指针技巧降低复杂度. mergeSort函数使用了递归,当中先对左右序列各调用一次mergeSort,再对整个序列调用merge.就按照最浅层的归并的思想去理解,不要 ...

  7. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  8. Ultra-QuickSort POJ 2299(归并排序)

    http://acm.hust.edu.cn/vjudge/contest/124435#problem/D 题意:给出一个长度为n的数列,你每一次可以随意交换其中两个数字的位置.问你至少交换几次,才 ...

  9. 【算法导论】【ACM】归并排序总结

    许多有用的算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关地若干子问题.这些算法典型的遵循分治法地思想:将原问题分解成几个规模较小但类似于原问题的子问题,递归 ...

最新文章

  1. jquery即时搜索查询插件jquery.search.js
  2. NSAutoreleasePool
  3. Django 学习笔记之七 实现分页
  4. Lesson 15.2 学习率调度在PyTorch中的实现方法
  5. range 和 xrange
  6. bzoj 1419: Red is good
  7. php中怎样创建数据库服务器,实例讲解通过​PHP创建数据库
  8. 【转】Redis学习---阿里云Redis多线程性能增强版详解
  9. 遇见Flask-Script
  10. (已解决)Mon Apr 08 14:02:29 CST 2019 WARN: Establishing SSL connection without server's
  11. Python读取指定文件夹下指定类型数据的文件名并保存到TXT文件中
  12. java计算图形面积实验_java源码——计算立体图形的表面积和体积
  13. 01_测试基础知识---功能测试常用方法/正交表的使用
  14. 倒车检测线怎么接图解_倒车影像摄像头3根线安装图解 这是倒车影像的电源线...
  15. 【计算机网络实验】DHCP报文捕获和分析
  16. word 2010中页码从任意页开始
  17. SpringBoot 2.3 新特性之优雅停机
  18. 手绘风格的 JS 图表库:Chart.xkcd
  19. 和华明诚:店铺推广要注意哪些事项
  20. 苹果原装转接头不能连html,转载 苹果官方告诉你如何识别真假数据线转接器

热门文章

  1. 定时执行sql统计数据库连接数并记录到表中
  2. php功能代码下载,PHP实现下载功能的代码
  3. object怎么转list_PaddleOCR识别模型转Pytorch全流程记录
  4. 利用jasperreports报表生成pdf文档中文不能显示问题解决方法
  5. element ui缩小行高
  6. Kotlin入门(13)类成员的众生相
  7. Android开发笔记(一百零九)利用网盘实现云存储
  8. Android开发笔记(五十八)铃声与震动
  9. mouseover和mouseout多次触发解决方法(兼容ie和firefox)(转)
  10. 【数学】稀疏图的随机游走问题