归并排序只能对两个已经有序的列表进行合并排序,所以要我们自己创建出两个有序列表。最后在进行合并.

def merge2list(li1, li2):
li = []
i = 0
j = 0
while i < len(li1) and j < len(li2):
if li1[i] <= li2[j]:
li.append(li1[i])
i += 1
else:
li.append(li2[j])
j += 1
while i < len(li1):
li.append(li1[i])
i += 1
while j < len(li2):
li.append(li2[j])
j += 1
return li
def merge(li, low, mid, high):
# 列表两段有序: [low, mid] [mid+1, high]
i = low
j = mid + 1
li_tmp = []
while i <= mid and j <= high:
if li[i] <= li[j]:
li_tmp.append(li[i])
i += 1
else:
li_tmp.append(li[j])
j += 1
while i <= mid:
li_tmp.append(li[i])
i += 1
while j <= high:
li_tmp.append(li[j])
j += 1
# li_tmp[0:high-low+1] li[low:high+1]
for i in range(low, high+1):
li[i] = li_tmp[i-low]
def _merge_sort(li, low, high): #排序li的low到high的范围
if low < high:
mid = (low + high) // 2
_merge_sort(li, low, mid)
_merge_sort(li, mid+1, high)
# print(li[low:mid + 1], li[mid + 1:high + 1])
merge(li, low, mid, high)
# print(li[low: high + 1])

排序算法Nb三人组-归并排序的更多相关文章

  1. 排序算法Nb三人组-快速排序

    核心思想: 将列表中第一个元素拿出来,放到一边,左右两个循环,左面的大于拿出来的数,就把他挪到右面, 右面的小于拿出来的数就把他放在左面,这是列表被第一个元素''分''为两个列表,在对两个列表进行同样 ...

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

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

  3. 算法NB三人组

    #快速排序-除了python自带的sort排序模块之外就这个最好用,只需会这个就行,其他的排序了解就好,能用冒泡,插入..的都可以用快排快速实现 import random from timewrap ...

  4. 排序算法lowb三人组-选择排序

    def get_min_pos(li): min_pos = 0 for i in range(1, len(li)): if li[i] < li[min_pos]: min_pos = i ...

  5. 排序算法lowb三人组-插入排序

    def insert_sort(li): for i in range(1, len(li)): # i表示摸到的牌的下标 tmp = li[i] # 摸到的牌 j = i - 1 while j & ...

  6. 排序算法lowb三人组-冒泡排序

    冒泡排序:顾名思义就是像气泡从水里浮出来一样 把列表立起来如上图所示,从列表的第0项开始循环(把最大的数想成此次循环的气泡) 要把最大的放到上面那那就用第0项开始一次和剩下的开始比较,只要比第0项小就 ...

  7. 算法排序-NB三人组

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

  8. 排序NB三人组

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

  9. Java排序算法(三)

    Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...

随机推荐

  1. jupyter notebook 的安装及使用

    推荐使用Python3 版本 安装pip3 版本 打开终端输入,安装jupyter notebook(ipython4之后命名) pip3 install jupyter notebook 启动jup ...

  2. noip提高组模拟赛(QBXT)T2

    T2count题解 [ 问题描述]: 小 A 是一名热衷于优化各种算法的 OIER,有一天他给了你一个随机生成的 1~n 的排列, 并定 义区间[l,r]的价值为: \[ \huge C_{l,r}= ...

  3. js 时间戳的转化,js 日期转成标准字符串,日期格式的相互转化

    1.时间的获取 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1 ...

  4. maven build 添加到 META-INF 目录。

    <build> <resources> <resource> <directory>src/main/resources</directory&g ...

  5. 包子凑数(dp思想)

    问题描述: 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼.每当有顾客想买X个包子,卖包子的大叔就会迅速选 ...

  6. [原创]markdown语法学习(commonmark)

    CommonMark是markdown的解析器,以下是部分学习链接: commonmark规范 https://spec.commonmark.org/ commonmark帮助 https://co ...

  7. EXTJS文档地址

    文档地址:http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.form.field.Field-event-change

  8. 练习 DOUBLE INSERT

      练习 DOUBLE INSERT 目标:从一张表取数据插入到另一张表中,此外需要为插入的目标表做一个应用级的日志表,也就是说在插入目标表的同时,还需要将相同的数据插入到日志表中. 在案例一中,我们 ...

  9. Cook-Torrance光照模型

    Cook-Torrance光照模型将物体粗糙表面看作由很多微平面组成,每一个微平面都可以看成一个理想的镜面反射体,物体表面粗糙程度由微平面斜率的变化来表示.越粗糙的表面由斜率变化越大,反之越小. Co ...

  10. 3dsmax2016卸载/安装失败/如何彻底卸载清除干净3dsmax2016注册表和文件的方法

    3dsmax2016提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2016失败提示3dsmax2016安装未完成,某些产品无法安装,也有时候想重新 ...