日期:2014-05-20 浏览次数:20745 次
int[] a={2,4,6,7,8,9};
int[] b={4,7,8,23,25,46};
int[] tmp = new int[a.length + b.length]; //合并后的数组长度最长不会超过2个数组长度的和
int count = 0;
for (int i=0, j=0;i<a.length || j<b.length;) { //两个数组一起循环遍历
if (i<a.length && j<b.length) {
if (a[i] == b[i]) {
tmp[count++] = a[i];
i++;
j++;
} else if (a[i] < b[j]) {
tmp[count++] = a[i];
i++;
} else {
tmp[count++] = b[j];
j++;
}
} else if (i<a.length) {
tmp[count++] = a[i++];
} else {
tmp[count++] = b[j++];
}
}
int[] result = new int[count]; //最终合并结果的数组长度为count
System.arraycopy(tmp, 0, result, 0, count); //拷贝最终结果
System.out.println(Arrays.toString(result)); //打印结果检验
------解决方案--------------------
/**
* 有2个升序数组int[] a={2,4,6,7,8,9};int[] b={4,7,8,23,25,46};
* 将其合并为一个C数组,要求C为升序数组,并且使用上a和b数组,自己写算法!
*/
public class Test {
public static void main(String args[]){
int[] a={2,4,6,7,8,9};
int[] b={4,7,8,23,25,46};
int[] result = getNewArray(a,b);
for(int i = 0; i < result.length; i ++){
System.out.println(result[i]);
}
}
public static int[] getNewArray(int[] a, int[] b){
int[] reustArray = new int[a.length + b.length];
int count = 0;
for(int i=0, j =0; (i < a.length || j < b.length);){
if(i < a.length && j < b.length){
int aTemp = a[i];
int bTemp = b[j];
if(aTemp > bTemp){
reustArray[count ++] = bTemp;
j ++;
}else if(aTemp <= bTemp){
reustArray[count ++] = aTemp;
i++;
}
}else if(i < a.length){
reustArray[count ++] = a[i];
i ++;
}else{
reustArray[count ++] = b[j];
j++;
}
}
return reustArray;
}
}
------解决方案--------------------
归并排序。。。
public static int[] mergeSort(int[] data1,int[] data2){
int[] temp=new int[data1.length+data2.length];
int i=0,j=0,iter=0;
for(;i<data1.length&&j<data2.length;){
if(data1[i]<=data2[j]){
temp[iter]=data1[i];
iter++;
i++;
}
else{
temp[iter]=data2[j];
iter++;
j++;
}
}
for(;i<data1.length;i++,iter++){
temp[iter]=data1[i];
}
for(;j<data2.length;j++,iter++){
temp[iter]=data2[j];
}
return temp;
}