题目:有两个有序数组a和b,将它们合并成数组c,需要c也是有序数组。
具体思路:
将新建一个长度为a和b长度之和的数组,将较长的数组复制到新数组,将较短的数组每个元素插入到指定位置(用到插入排序算法)。
时间复杂度O(n^2)
public class ArrayMerge {
/**
* 思路:插入排序
* 1.将长数组复制到一个两个数组之长之和的数组
* 2.将短数组插入到新数组的合适位置
* @param array1
* @param array2
*/
public static void merge(int[] array1, int[] array2) {
int[] newArray = null;
int[] minArray = null;
int oldLenth = 0;
//选出长数组 并复制到新的数组
if(array1.length > array2.length) {
oldLenth = array1.length;
newArray = Arrays.copyOf(array1, array1.length+array2.length);
minArray = array2;
}else {
oldLenth = array2.length;
newArray = Arrays.copyOf(array2, array1.length+array2.length);
minArray = array1;
}
//进行插入
int i = 0;
while(i < minArray.length) {
int j = oldLenth-1;
while(j >= 0) {
if(minArray[i] < newArray[j]) {
//将新数组的元素后移一个下标
newArray[j+1] = newArray[j];
//如果到0坐标 直接插入
if(j==0) {
newArray[j] = minArray[i];
}
}else {
//插入到指定位置
newArray[j+1] = minArray[i];
break;
}
j--;
}
oldLenth++;
i++;
}
}
}