排序算法之--归并排序(好玩的一个算法o。o)

下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦)

归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾。

大家需要注意的是,进行归并操作来实现数组排序的前提是:归并操作两边的数组要都是有序的(所以这里又涉及到了递归的过程,而单单递归好像也没用哦,有用的递归是从小范围开始递归到大范围,所以这里又涉及到了,中分递归)。

了解了这个大题的四路:归并排序其实也不是很难理解了哦。

直接上个图,便于理解:

图片的分解其实就相当于中分递归,后面的合并其实就是归并操作;

先来了解一下归并操作的编程部分:

先定义两个指针,一个指向左边,一个指向中间+1,再定义一个辅助数组help[](说明其空间复杂度为O(N)哦)

来比较一下大小,小的元素放到辅助数组中,并将下标++,直到两个指针有一个为空,跳出,将另外一部分还没放到辅助数组的元素拷贝到辅助数组中去。下面供上流程图:

通俗易懂就是这个:

下面对程序进行分析:

26~30行定义变量和数组

31,32判断有没有越界,没有越界就比较大小,小的放进去,同时辅助数组下标++,比较小的指针也++

37~47则是将将另外一部分还没放到辅助数组的元素拷贝到辅助数组中去。

到这里那我们就直接上程序了哦。

下面就是所谓的中分递归和归并递归了;

排序算法之--归并排序(好玩的一个算法o。o)快速入门相关推荐

  1. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  2. C++算法之归并排序

    C++算法之归并排序 文章目录 C++算法之归并排序 一.归并排序思想 二.排序步骤 三.代码实现 四.复杂度分析 一.归并排序思想 回顾快速排序的基本思想:找出一个分界线,并以该分界线为界将数组分为 ...

  3. python实现基本算法之归并排序(Merge sort)

    基本算法之归并排序(Merge sort) 基本算法-04.归并排序(Merge sort)算法 .往期请看选择排序,插入排序,归并排序,快速排序等等都发布的!欢迎大家批评指正! 文章目录 基本算法之 ...

  4. noj数据结构稀疏矩阵的加法十字链表_一个算法毁了一款好游戏?算法和数据结构到底有多重要?...

    来源 | 异步 | 文末赠书 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多 ...

  5. 一个算法对于某个输入的循环次数是可以事先估计出来的_数据结构与算法:算法...

    算法(algorithm )是指令的集合,是为解决特定问题而规定的一系列操作.它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出.一个算法通常来说具有以下五个特性: 输入:一 ...

  6. 大剑无锋之如何评判一个算法的优劣【面试推荐】

    ①时间复杂度:同样的输入规模(问题规模)花费多少时间 ②空间复杂度:同样的输入规模花费多少空间(主要是内存) 以上两点越小越好 ③稳定性(健壮性):不会因为输入的不同而导致不稳定的情况发生 ④算法思路 ...

  7. 一个算法毁了一款好游戏?算法和数据结构到底有多重要?

    来源 | 异步 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多. 首先是存档 ...

  8. 数据结构与算法(程序员常用的十种算法:上1~5)

    一:二分查找 二分查找算法(非递归)介绍 (1)前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方法 (2)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等), ...

  9. 【算法的时间复杂度和空间复杂度】-算法02

    算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...

最新文章

  1. 独家 | 用Python Featuretools库实现自动化特征工程(附链接)
  2. acer清理工具 clear下载_时秋极致清理大师app下载安装_时秋极致清理大师软件最新版免费下载...
  3. [AWDwR4] Iteration F4
  4. 与TCP/IP协议的初次见面(一)
  5. python向数据库中添加参数_第四篇:python操作数据库时的传参问题
  6. GFM与博客园markdown测试
  7. Spring面试之不同版本AOP执行顺序详解
  8. Ubuntu 配置Samba 服务器
  9. matlab简单分析其他类型滤波器(陷波尖峰梳状半带希尔伯特)
  10. 场景应用:100亿的数据你怎么排序
  11. 空间索引 - 四叉树
  12. Android ASM插桩
  13. Matlab出错向量长度必须相同,代码已贴。错误使用plot3,向量长度必须相同
  14. 细粒度分类:Hierarchical Bilinear Pooling(HBP),分级双线性池化(一)
  15. 北京市房价预测---数据收集
  16. 洛谷【P1873】 砍树 简单二分解析
  17. 如何正确使用Pandas库提升项目的运行速度?
  18. mysql 字符串截取
  19. Vue2生命周期函数
  20. Vue天地图之图层类型切换

热门文章

  1. puppeteer执行js_使用Node.js和Puppeteer与表单和网页进行交互– 1
  2. 彻夜怒肝!Spring Boot+Sentinel+Nacos高并发已撸完,快要裂开了!
  3. 第 5-4 课:ThreadLocal 详解 + 面试题
  4. 面试题:聊一聊设计模式的基本原则
  5. React Native App设置amp;Android版发布
  6. Winform实现漂亮动画-小火车
  7. Android 禁止屏幕旋转 旋转屏幕时保持Activity内容
  8. python合并两个数据框_使用python合并两个数据框
  9. linux frp 内网穿透 nginx反向代理
  10. java caller_js中的caller和callee属性