合并有序数组

合并有序数组

方法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);
        }
    }

热门相关:洪荒二郎传   万古至尊   锦庭娇   金粉   修真界败类