专栏中心

EEPW首页 > 专栏 > 扣丁学堂Java培训之归并算法之有序数组合并算法实现

扣丁学堂Java培训之归并算法之有序数组合并算法实现

发布人:扣丁学堂1 时间:2021-01-08 来源:工程师 发布文章

        近期扣丁学堂Java在线学习小编会给大家分享一些比较实用的Java技能,对Java开发感兴趣的小伙伴们可以关注了解一下,本篇文章小编和大家分享的是归并算法之有序数组合并算法实现,下面我们一块来看一下吧。

Java视频教程之归并算法之有序数组合并算法实现

       一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个数组,找到这两个数组中各个元素在合并数组中的位置并插入,直到某个数组指针到达尾部。再将另一个数组剩下的所有元素,直接放入归并数组尾部。算法的简单实现,需要注意的是对参数的校验,判断数组是否有序。

public class MergeOrderedArray { 
 public static int[] merge(int [] a,int []b){ 
  if(!isOrderedArray(a)){ 
   System.out.println(" array a is not an ordered array."); 
   return null; 
  } 
    
  if(!isOrderedArray(b)){ 
   System.out.println(" array b is not an ordered array."); 
   return null; 
  } 
   
  int a_len = a.length; 
  int b_len = b.length; 
  int[] merge = new int[a_len+b_len]; 
  int i=0,j=0,k=0; 
  while(i<a_len&&j<b_len){ 
   if(a[i]<b[j]){ 
    merge[k++]=a[i++]; 
   }else{ 
    merge[k++]=b[j++]; 
   } 
  } 
   
  //A数组全部合并完毕,将b数组剩余直接加入合并数组 
  if(i==a_len){ 
   for(;j<b_len;j++){ 
    merge[k++]= b[j]; 
   } 
  }else{ 
   for(;i<a_len;i++){ 
    merge[k++]= a[i]; 
   } 
  } 
   
  return merge; 
   
 } 
 
 public static boolean isOrderedArray(int [] array){ 
  if(array==null||array.length==0){ 
   return false; 
  } 
   
  for(int i = 0;i<array.length-1;i++){ 
   if(array[i]>array[i+1]){ 
    return false; 
   } 
  } 
  return true; 
 } 
  
 public static void main(String[] args) { 
  int a [] = {1,2,3,4,5}; 
  int b [] = {2,3,4,5,6,7,8,9}; 
  int [] merge = merge(a,b); 
  System.out.println(Arrays.toString(merge)); 
 } 
}


算法的时间复杂度,取决于待合并的两个数组的长度,所以是O(M+N),空间复杂度也是O(M+N),即需要的归并数组的长度是M+N。

以上是扣丁学堂Java在线学习小编简单为大家分享的归并算法之有序数组合并算法实现,希望对小伙伴们会有所帮助。想要了解更多Java开发方面的问题的话,小伙伴们可以登录扣丁学堂官网咨询。扣丁学堂是专业的Java培训机构,不仅有专业的老师和与时俱进的课程体系,还有大量的Java视频教程供学员观看学习,想要学好Java开发的小伙伴快快行动吧。扣丁学堂java技术交流群:487098661。微信号:codingbb

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

嵌入式系统硬件接口设计 中

视频 2009-10-27

嵌入式系统硬件接口设计 下

视频 2009-10-27

如何预测和抑制电磁干扰

什么是HPC内存墙,如何跨越它?

网络与存储 2025-05-27

AI模型怕被关机竟威胁:爆料你

智能计算 2025-05-27

SmartARM2200平台专题报导

用于更精确神经组织刺激的ASIC

医疗电子 2025-05-27

数字孪生平台为AI和6G Open RAN研究提供支持

什么是LTE中的DRX(非连续接收)?

SJA1000独立的CAN控制器应用指南

不需要稀有金属会“呼吸”的电池

嵌入式linux Framebuffer驱动开发 中

SmartARM2200教学实验开发平台

嵌入式linux Framebuffer驱动开发 下

SmartPRO 5000U脱机产量控制功能

SJA1000独立的CAN控制器应用指南 (英)

将电流传感器集成到EV用SiC功率模块中

嵌入式系统硬件接口设计 上

视频 2009-10-27

石墨烯超快激光创造了“世界上最快的petahertz量子晶体管”。

固态电池从研究走向现实

汽车电子 2025-05-27
更多 培训课堂
更多 焦点
更多 视频

技术专区