归并排序的思路:

归并算法程序(配合下图进行思考):

def merge(li,low,mid,high):
i = low
j = mid + 1
ltmp=[]
while i <= mid and j <= high: # 左边有数 且 右边也有数
if li[i] < li[j]: # 左边小于右边
ltmp.append(li[i]) # 把左边的数 添加到 ltmp 这个列表中
i += 1 # 右移一位
else:
ltmp.append(li[j]) # 右边小于左边
j += 1 # 右移
while i <= mid: # 如果左边有剩余
ltmp.append(li[i]) # 将剩余的加入ltmp列表
i += 1 # 右移
while j <= high: # 如果右边有剩余
ltmp.append(li[j]) # 将剩余的加入ltmp列表
j += 1 # 右移
li[low:high+1] = ltmp # 将ltmp这个列表里的数 传给 li 这个列表 li = [1,4,6,7,9,2,3,5,8]
merge(li,0,4,8)
print(li)

打印出来的效果图为:

有了归并怎么用?

def merge(li,low,mid,high):
i = low
j = mid + 1
ltmp=[]
while i <= mid and j <= high: # 左边有数 且 右边也有数
if li[i] < li[j]: # 左边小于右边
ltmp.append(li[i]) # 把左边的数 添加到 ltmp 这个列表中
i += 1 # 右移一位
else:
ltmp.append(li[j]) # 右边小于左边
j += 1 # 右移
while i <= mid: # 如果左边有剩余
ltmp.append(li[i]) # 将剩余的加入ltmp列表
i += 1 # 右移
while j <= high: # 如果右边有剩余
ltmp.append(li[j]) # 将剩余的加入ltmp列表
j += 1 # 右移
li[low:high+1] = ltmp # 将ltmp这个列表里的数 传给 li 这个列表 def mergesort(li,low,high):
if low < high:
mid = (low + high) // 2
mergesort(li,low,mid) # 先分解
mergesort(li,mid+1,high) # 先分解
merge(li,low,mid,high) # 在合并 li = [1,4,6,7,9,2,3,5,8,]
mergesort(li,0,8)
print(li)

 

NB二人组(二)----归并排序的更多相关文章

  1. 算法 排序NB二人组 堆排序 归并排序

    参考博客:基于python的七种经典排序算法     常用排序算法总结(一) 序前传 - 树与二叉树 树是一种很常见的非线性的数据结构,称为树形结构,简称树.所谓数据结构就是一组数据的集合连同它们的储 ...

  2. 列表排序之NB三人组附加一个希尔排序

    NB三人组之 快速排序 def partition(li, left, right): tmp = li[left] while left < right: while left < ri ...

  3. 排序NB三人组

    排序NB三人组 快速排序,堆排序,归并排序 1.快速排序 方法其实很简单:分别从初始序列“6  1  2 7  9  3  4  5 10  8”两端开始“探测”.先从右往左找一个小于6的数,再从左往 ...

  4. 算法排序-NB三人组

    快速排序: 堆排序: 二叉树: 两种特殊二叉树: 二叉树的存储方式: 小结: 堆排序正题: 向下调整: 堆排序过程: 堆排序-内置模块: 扩展问题topk: 归并排序: 怎么使用: NB三人组小结

  5. [分享] IT天空的二十二条军规

    Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...

  6. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

  7. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  8. 二十二、OGNL的一些其他操作

    二十二.OGNL的一些其他操作 投影 ?判断满足条件 动作类代码: ^ $   public class Demo2Action extends ActionSupport {     public ...

  9. WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]

    原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...

  10. VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池

    VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池 在上一节我们创建了完整克隆的自动专有桌面池,在创建过程比较缓慢,这次我们将学习创建Vi ...

随机推荐

  1. 【第二周】【作业五】Scrum 每日站会

    1.首先来看一下什么是Scrum: Scrum是一种敏捷软件开发的方法学,用于迭代式增量软件开发过程.Scrum在英语是橄榄球运动中争球的意思. 虽然Scrum是为管理软件开发项目而开发的,它同样可以 ...

  2. CentOS安装crontab及使用方法(转)

    CentOS安装crontab及使用方法(转)    安装crontab:[root@CentOS ~]# yum install vixie-cron[root@CentOS ~]# yum ins ...

  3. Java知识点整理(三)

    如何设计出高可用的分布式架构 分布式架构 CDN简介 分布式缓存和本地缓存区别 高并发场景常用技术解决方案 JVM优化示例 Docker和JVM区别 Java开发人员需要注意的五大Docker误区 D ...

  4. XTU 1233 Coins(DP)

    题意: n个硬币摆成一排,问有连续m个正面朝上的硬币的序列种数. 很明显的DP题.定义状态dp[i][1]表示前i个硬币满足条件的序列种数.dp[i][0]表示前i个硬币不满足条件的序列种数. 那么显 ...

  5. Android APK打包流程

    简单build流程图 官网给了我们一张非常简单的编译.打包.apk生成内容以及签名的图片.图片大体介绍了从Project到运行到设备或者模拟器的一个大体流程,我们也从中看到一个完整的apk包含如下内容 ...

  6. 图像格式转换之BMP格式转换为JPG格式

    // bmp2jpg.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "jpeglib.h" #inc ...

  7. Myeclipse下配置SVN报错问题 svn: E175002: java.lang.RuntimeException: Could not generate DH keypair,缺少subclipse插件的javaHL

    在myeclipse10.0下安装svn插件,出现了Could not generate DH keypair,这么一个错误. 看到了一篇博客说是svn接口选择问题,可是我myeclipse没有那个接 ...

  8. gflag使用

    #include <gflags/gflags.h> #include <iostream> // 声明全局flag DEFINE_bool(my_bool, false, & ...

  9. Linux iptables:场景实战一

    <Linux iptables:规则原理和基础>和<Linux iptables:规则组成>介绍了iptables的基础及iptables规则的组成,本篇通过实际操作进行ipt ...

  10. 配置pdo 的用户和密码,

    注意:要进入mysql命令行来操作~~~~ grant all on *.* to pdo_root@'%' identified by 'pdo_pwd'; flush privileges