自下而上与自上而下的归并排序

问题来源:我一开始也没有注意到这一点,直到我做了这个题

这个题目中所描述的归并排序是这样的:
也就是说,对于十个元素的情况,比如
3 1 2 8 7 5 9 4 6 0
相邻元素两两结合后,就成了
(3 1)(2 8)(7 5)(9 4)(6 0)
一次排序后为
(1 3)(2 8)(5 7)(4 9)(0 6)
二次排序后为
(1 2 3 8)(4 5 7 9)(0 6)
三次排序后为
(1 2 3 4 5 7 8 9)(0 6)
四次排序后为
(0 1 2 3 4 5 6 7 8 9)

以上为“自下而上”的归并排序

但是!!!

如果为“自上而下”的归并排序

(3 1 2 8 7 5 9 4 6 0)
第一次递归下去
(3 1 2 8 7)(5 9 4 6 0)
第二次递归下去
(3 1 2)(8 7)(5 9 4)(6 0)
第三次递归下去
(3 1)(2)(8 )(7)(5 9)(4)(6)(0)
第四次递归下去
(3)(1)(2)(8)(7)(5)(9)(4)(6)(0)
第一次回溯(一次排序后为)
(1 3)(2)(7 8)(5 9)(4)(0 6)
第二次回溯(二次排序后为)
(1 2 3)(7 8)(4 5 9)(0 6)
第三次回溯(三次排序后为)
(1 2 3 7 8)(0 4 5 6 9)
第四次回溯(四次排序后为)
(0 1 2 3 4 5 6 7 8 9)

我们不难发现,两次过程中的数组排列情况是不同的

因此,在归并排序方面,要认识到自上而下与自下而上的区别

---------------------------------------------------------------------------------------------------------------------

代码实现

void Merge_sort_downtoup(){int t = 2;//最小分割单元 while(t <= n){for(int i = 1; i <= n; i += t){sort(a + i, a + min(i + t, n + 1));//注意sort的使用 }/*这里可以进行一些操作 */ t *= 2;}return ;
}
void Merge_sort_uptodown(int l, int r){if(l == r) return ;int mid = (l + r) / 2;Merge_sort_uptodown(l, mid);Merge_sort_uptodown(mid + 1, r);int i = l, j = mid + 1, t = l;while(i <= mid && j <= r){if(a[i] <= a[j]){k[t] = a[i];t ++;i ++;}else{k[t] = a[j];t ++;j ++;}}while(i <= mid){k[t] = a[i];t ++;i ++;}while(j <= r){k[t] = a[j];t ++;j ++;}for(int i = l; i <= r; ++ i)a[i] = k[i];return ;
}

自下而上与自上而下的归并排序相关推荐

  1. 自下而上和自上而下的注意力模型《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》

    本文有点长,请耐心阅读,定会有收货.如有不足,欢迎交流, 另附:论文下载地址 一.文献摘要介绍 Top-down visual attention mechanisms have been used ...

  2. 建模自上而下自下而上_物理学家到程序员:自下而上与自上而下的学习

    建模自上而下自下而上 翻译自: https://hackernoon.com/physicist-to-programmer-bottom-up-vs-top-down-learning-8e0610 ...

  3. <<算法很美>>——(四)——深入递归<一>——自上而下,自下而上

    目录 前言 上楼梯 机器人走方格 前言 接着上篇博客详解递归思想我们继续更深入地分析递归,本篇主要更加深入讲解上篇的自下而上和自上而下思想. 啥叫「自顶向下」?是从上向下延伸,都是从一个规模较大的原问 ...

  4. 《Algorithms》Comparable 实现归并排序

    Comparable 实现归并排序 原地归并的抽象方法 自上而下的归并排序 从下往上的归并排序 参考文章的地址:http://www.cnblogs.com/skywang12345/p/360236 ...

  5. 自上而下的因果关系:数学结构与观察者

    导语 复杂性的基础是模块化的分层结构,导致基于较低级别网络的结构和功能的涌现级别.通俗而言,当需要执行复杂的任务时,可以将其分解为子任务,每个子任务都比整个项目更简单,需要更少的数据和更少的计算能力, ...

  6. 看了这篇 LeetCode 的刷题心得,再也不用抄别人代码了

    作者:VioletJack 原文:<LeetCode 算法题刷题心得>https://www.jianshu.com/p/8876704ea9c8 花了十几天,把<算法>看了一 ...

  7. 多个矩形,求覆盖面积,周长,及交点

    问题:给出若干个矩形,(给的是矩形左上角和右下角坐标),求最后所得图形的面积/周长: 三个矩形如左图所示,而若要计算面积,看右图,用3个矩形各自的面积之和减去重复部分(红色和蓝色)的面积 人算很简单, ...

  8. 基于深度学习的目标检测综述

    基于深度学习的目标检测算法归类和总结 整体框架 目标检测算法 主要包括:[两阶段]目标检测算法.[多阶段]目标检测算法.[单阶段]目标检测算法 什么是两阶段目标检测算法,与单阶段目标检测有什么区别? ...

  9. 用产品思路建设中台,这走得通吗?| 白话中台

    作者 | 王健,ThoughtWorks首席咨询师. 十多年国内外大型企业软件设计开发,团队组织转型经验.一直保持着对技术的热爱,热衷于技术分享.目前专注在企业平台化转型.中台战略规划,微服务架构与实 ...

  10. Hinton新论文:如何在神经网络中表示“部分-整体层次结构”?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Geoffrey Hinton 来源丨AI科技评论 编辑丨极市 ...

最新文章

  1. Cisco 双出口NAT配置
  2. 4步教你玩转可视化大屏设计|内附实际操作
  3. 【python零基础入门学习】Python入门,带你快速学习,Python 环境搭建
  4. 百度回应2015年的“复旦视频”:不要让当年唱歌的学生面对舆论压力
  5. python入门基础知识实例-Python入门基础知识实例,
  6. 应用多元统计分析第四章基于最小二乘估计线性回归分析python代码
  7. 网络电视机顶盒测试软件,调试接口查找方法,机顶盒刷成全网通盒子,实现免费看电视...
  8. 简单git用ssh方式下载代码
  9. VS中如何导入wav并且播放音乐
  10. 为什么 AI 犯的错有时会很“瘆人”?
  11. 微信公众号 语音转文字api_微信语音快速转文字功能,方便实用
  12. 网页标题前面的logo怎么设置
  13. 这个对老爸老妈有好处
  14. 抖音小程序怎么注册?一文看懂抖音小程序注册开发流程
  15. ChinaGrid要建8朵“云”
  16. 用C语言写藏头诗或藏尾诗
  17. 前端引用高德地图SDK
  18. 防火墙一个系统加固的例子
  19. 利用Matlab编写龙贝格算法(romberg)求函数积分
  20. Android 简单跟踪重力传感器方向旋转屏幕framework的代码

热门文章

  1. 千人虚拟社交体验,多人元宇宙场景真的可行么?
  2. 字符串后#号导致导出excel换行问题
  3. 全网疯传!最新高频100题汇总(附答案详解)
  4. css3效果隔两秒旋转然后停两秒再继续旋转,无限循环
  5. grafana设置邮件监控报警
  6. 数学与计算机学院女生节标语,女生节标语理学院
  7. DIY智能家居语音助理——语音智控万物
  8. 【HCIE备考笔记】TAC报告总结
  9. 【Unity3D日常开发】新建2D、3D场景,新建场景没有灯光等问题
  10. 曾国藩家训:三个地方看一个家庭的兴败