给定两个有序的数组arr1和arr2,将两个数组合并成一个新的有序数组
示例:
left_arr={1,4,7,9,19,25}
right_arr={3,5,7,14,26,37,49,50}
合并之后:
arr3={1,3,4,7,7,9,14,19,25,26,37,49,50}
-思路:定一个一个边长的数据,长度为两个数组的长之和;设想把两个数组分别左右顺序排序,然后同时遍历两个数组,对比left_arr[i]和right_arr[j]两个数,开始进行左右两个小的那个组放到arr3中,并且小的那边的数组index+1,而大的那边数据index不变,以此不停进行交替遍历,直至不能遍历为止,如果遇到左右两个数相等,则同时放到arr3中并且两个数组的index都+1,如果一方先遍历结束,怎该方数组不在index+1,另一方的数据以此放入arr3,左右数组都遍历结束则停止遍历,合并完毕,如下图:
代码实现如下(Java):
public static void main(String[] args) {
int[] left_arr={1,4,7,9,19,25};
int[] right_arr={3,5,7,14,26,37,49,50};
int i=0,j=0,arrL1=left_arr.length,arrL2=right_arr.length;
int[] arr3=new int[arrL1+arrL2];
int left=0,right=0,currentInsertIndex=0;
while (i<=arrL1&&j<=arrL2){
if(i<arrL1&&j<arrL2){
left=left_arr[i];
right=right_arr[j];
if(left>right){
arr3[currentInsertIndex]=right;
j++;
}else if(left==right){
arr3[currentInsertIndex]=left;
arr3[currentInsertIndex+1]=right;
currentInsertIndex++;
i++;j++;
}else {
arr3[currentInsertIndex]=left;
i++;
}
}else if(i==arrL1&&j<arrL2){
arr3[currentInsertIndex]=right_arr[j];
j++;
}else if(j==arrL2&&i<arrL1){
arr3[currentInsertIndex]=left_arr[i];
i++;
}else{
break;
}
currentInsertIndex++;
}
for(int a:arr3){
System.out.printf(" "+a);
}
}