问题如下:如何将已按照升序排好的几个数组合并在一起,合并后的数组仍然是升序 要求不能使用 java JDK提供的工具类 Vector ArrayList这些都不可以使用 希望看看大家的思路
用归并排序
[java]
public class Merge {
public static void main(String[] args) {
int [] array1=new int[]{2,5,9,10,10,20};
int [] array2=new int[]{1,3,3,13,17,21,28,30};
int len=array1.length+array2.length;
int [] array3=new int[len];
int pos=0;
int idx=0;
for(int i=0;i if(array1[i]>array2[pos]) {
array3[idx++]=array2[pos++];
i--;
}
else array3[idx++]=array1[i];
}
if(idx<len){
for(int i=idx;i<len;i++){
array3[i]=array2[i-len+array2.length];
}
}
System.out.print("first array :");
for(int i=0;i<array1.length;i++){
System.out.print(array1[i]+" ");
}
System.out.println();
System.out.print("second array :");
for(int i=0;i<array2.length;i++){
System.out.print(array2[i]+" ");
}
System.out.println();
System.out.print("after sort :");
for(int i=0;i<len;i++){
System.out.print(array3[i]+" ");
}
System.out.println();
}
}
[/java]
这个应该放在数据结构与算法里面
排序算法分好多种,归并排序是其中一种。这个问题使用归并排序的思想可以解决。
将已排好序的多个数组两两分组(如果数组总数为奇数的话,则其中一组只有一个数组),分别对每一组排序,对所有组都排完序后,又会得到n个数组,对这n个数组,再次两两分组排序,重复这个过程,只到只有一个数组为止,这个最终的数组就是想要的结果数组。
对每一组排序的算法描述:可以看楼上fivestarwy的代码。