当前位置:网站首页 > 技术博客 > 正文

归并排序百度百科



采用了分治策略 就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解。

归并的核心思想 将两个有序的数组合并成一个大的有序的数组,通过递归把待排序数组变成完全有序数组。

归并的核心算法就是如何将2个数组合并

将待排序数组一直往下分解直到不可分解为止也就是一个数为一个子数组

然后对这些子数组层层合并(合并里有排序的过程)得到最后的有序数组

分解的过程很简单 就是一直递归向下分解 直到一个元素一组为止

其实就是合并2个有序数组的算法: 

首先要有一个临时数组temp 以及2个索引分别指向2个数组的首地址 让2个索引对应的值进行比较 谁对应的值小 把值小的放入temp 然后当前索引++ 再循环比较 肯定会有一个数组索引先到头 在对另一个数组剩下的元素遍历放入temp即可

然后再把合并好的数组放会原数组对应的为止 就算完成此次合并

以 {3,4,6,10} {2,5,7,8} 为例作图给大家演示下:

两个数组索引对应的值进行比较 小的放进临时数组 索引++ 然后继续比较

↓    ↓   34610 2578
temp2       

 

 

↓     ↓  34610 2578
temp23      

 

 

 ↓    ↓  34610 2578
temp234     

 

 

  ↓   ↓  34610 2578
temp2345    

 

 

  ↓    ↓ 34610 2578
temp23456   

 

   ↓   ↓ 34610 2578
temp  

 

   ↓    ↓34610 2578
temp 

 

此时 其中一个数组索引已经到头了 然后直接对另一个数组剩余元素进行遍历放入temp即可

可能有些童鞋会有疑问为什么剩下的直接放进去就行?

因为2个数组都是有序数组 此数组当前索引对应的值比另一个数组最大值都大 此数组剩余元素值肯定大于另一个数组而且还是从小到大排列的 所以直接放入temp就可以了麻

temp

 

 

版权声明


相关文章:

  • c++结构体指针使用2025-03-24 22:00:59
  • 制药企业自检记录2025-03-24 22:00:59
  • 比较荤的歇后语2025-03-24 22:00:59
  • 数据库有几种2025-03-24 22:00:59
  • http请求头信息有哪些2025-03-24 22:00:59
  • mysql中索引的工作原理2025-03-24 22:00:59
  • rsa非对称加密算法详解2025-03-24 22:00:59
  • idea maven 本地仓库2025-03-24 22:00:59
  • js混淆在线解密2025-03-24 22:00:59
  • clash怎么开全局代理安卓2025-03-24 22:00:59