题目: 有两个排序的数组A1和A2,内存在A1的末尾有足够多的空间容纳A2,请事先一个函数,把A2中的所有数字插入到A1中并且所有的数组是排序的。

/*
	 * 算法思想:从尾部到头比较A1和A2中的数组,并把较大的数字复制到A1合适的位置
     举例:A1 = {2,4,6,8};
          A2= {3,5}
          A1有效数据长度是4,A2数组长度是2,A1为了能放下A2数据中的数据,必须要末尾还有空闲空间,在给A1数组赋长度时要考虑当前的A1数组的长度能放得下A2数组数据,所以,A1的真实长度为6,A1中是有放数据的,其数据长度为4.
          则A1数组空闲空间 = A1真实长度 - A2数组长度; (即代码中的OldA1length)
          然后,挨个比较A1和A2中的元素,大的放A1数组末尾。
	 * 	  
	 */
	public int[] Merge(int[] A1, int[] A2){
		int A1length = A1.length; //A1数组长度
		int A2length = A2.length; //A2数组长度
		int OldA1length = A1length - A2length; //A1插入A2数据前的有效数据长度
		
		int i=OldA1length-1; //A1数组有效数据最右边元素下标
		int j=A2length-1;    //A2数组最右边元素下标 
		int k=A1length-1;    //A1数组最右边元素下标
        
      //取两个数组相同长度部分,从A1末尾开始放入
		while(i>=0&&j>=0){
			if(A1[i] >= A2[j]){
				A1[k--] = A1[i--]; 
			}else{
				A1[k--] = A2[j--];
			}
		}
		
      //如果哪个数组有剩余部分,则有序放入A1数组中
		while(i>0){
			A1[k--] = A1[i--]; 
		}
		
      //这部分代码可有可以无
		while(j>0){
			A1[k--] = A2[j--];
		}
      
		return A1;
	}