最近看到一个面试题,花点时间学习学习
import java.util.Arrays;
import java.util.Random;
public class Test {
//把两个有序的数组合并成一个有序数组
//时间复杂度是O(n)
public static void main(String[] args) {
int[] a ={1,3,5,7,9};
int[] b ={2,4,6,8,10};
int[] c= addSort(a,b);
System.out.println(Arrays.toString(c));
}
/*
* 通过二路归并的算法合并数组
* */
public static int[] addSort(int[] arr1, int[] arr2){
int i = 0;
int j = 0;
int k = 0;
int len = arr1.length+arr2.length;
int[] arr = new int[len];
// 比较 数组arr1 和 arr2 大小 ,把最小的 赋值给新数组arr,
// 不停的遍历,直到 i 达到 arr1 的长度,或者 j 到 arr2 数组长度 就退出循环
while(i<arr1.length && j<arr2.length) {
if(arr1[i]<=arr2[j]) {
arr[k] = arr1[i];
i++;
k++;
}else {
arr[k] = arr2[j];
j++;k++;
}
}
//如果 i 达到 arr1 的长度,把 arr2 后面的数据赋值给 arr
if(i==arr1.length && j<arr2.length) {
while(j<arr2.length) {
arr[k] = arr2[j];
j++;
k++;
}
}
//如果 j 达到 arr2 的长度,把 arr1 后面的数据赋值给 arr
else if(j==arr2.length && i<arr1.length) {
while(i < arr1.length) {
arr[k] = arr1[i];
i++;
k++;
}
}
return arr;
}
}