合并有序数组
  MpDIILUd3rHo 2023年11月01日 101 0

合并有序数组

方法1-递归

//运用的思想就是比较谁大,谁就先被排进数组   
public  static void merge(int []a1,int i,int iEnd,int j,int jEnd,
                              int []a2,int k){
    //定义了一个a1数组,分了i,iEnd边界和j.jEnd边界,实际上是分成两个数组进行判断,比较判断哪个先进a2数组
        if(i>iEnd){//如果超出进行数组迁移
           System.arraycopy(a1,j,a2,k,jEnd-j+1);
            //原数组,开始迁移的位置,新数组,迁移到的位置,迁移的长度
           return;
        }
        if(j>jEnd){
            System.arraycopy(a1,i,a2,k,iEnd-i+1);
            return;
        }
//优先写这一步
    //如果a1[i]小,就放a[i]
        if(a1[i]<a1[j]){
             a2[k]=a1[i];
            //开始递归
             merge(a1,i+1,iEnd,j,jEnd,a2,k+1);
         }
         if(a1[i]>a1[j]){
             a2[k]=a1[j];
             merge(a1,i,iEnd,j+1,jEnd,a2,k+1);
         }
    }

非递归方法

   public static void merge1(int []a1,int i,int iEnd,int j,int jEnd,int []a2){
        int k=0;//内置k
        while (i<=iEnd&&j<=jEnd){//都没到边界
            if(a1[i]<a1[j]){
                a2[k]=a1[i];
                i++;//递增
            }else {
                a2[k]=a1[j];
                j++;
            }
            k++;
        }
        if(i>iEnd){//一旦i结束,复制数组j
            System.arraycopy(a1,j,a2,k,jEnd-j+1);
        }
        if(j>jEnd){
            System.arraycopy(a1,i,a2,k,iEnd-i+1);
        }
    }
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 二分图 下一篇: 拓扑排序
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jTMfQq5cr55P   2024年05月17日   42   0   0 算法与数据结构
  jTMfQq5cr55P   2024年05月17日   38   0   0 算法与数据结构
MpDIILUd3rHo