1.
/**
*
* 功能描述:合并两个有序序列
* 将两个有序的数组合并 成一个有序的大数组(归并排序中合并的思想)
*
* 思路 :
* 将 aArray 和 bArray 数组的元素两个两个比较,选出最小的
* 同时最小值 所在数组的下标右移动一个,继续比较
*
* int[] aArray = {1, 3, 5,7,9,11};
* int[] bArray = {2, 4, 6,8,10};
*
* aArray 的 1 和 bArray的 2 比较 ,1 小 ,右移动1位,3和2比较,2小, bArray 下标移动一位,4 和 3 比较
*
* 值小的 所在数组下标 要+1 ,继续比较,整个过程中,注意下标越界问题
*
* @author guoyiguang
* @date 2023/1/3
* @param
* @return
*/
public void mergeSortArrayTest(){
int[] aArray = {1, 3, 5,7,9,11}; // 11
int[] bArray = {2, 4, 6,8,10};
int[] combineArray = new int[aArray.length+bArray.length];
// a 数组下标变量
int aIndex = 0;
// b 数组下标变量
int bIndex = 0;
for(int i = 0 ;i <=(aArray.length+bArray.length-1) ;i++){
// aArray 中 a 和 bArray 中 b 下标的最小值
// aArray 数组和 bArray 数组 里元素 都没有 用尽
if(aIndex <= aArray.length-1 && bIndex <= bArray.length-1){
if(aArray[aIndex] < bArray[bIndex]){
combineArray[i] = aArray[aIndex];
aIndex++;
}else{
combineArray[i] = bArray[bIndex];
bIndex++;
}
// aArray 数组 没有耗尽, bArray 耗尽
}else if(aIndex <= aArray.length-1 && bIndex > bArray.length-1){
combineArray[i] = aArray[aIndex];
aIndex++;
// aArray 数组 耗尽, bArray 没有耗尽
}else if(aIndex > aArray.length-1 && bIndex <= bArray.length-1){
combineArray[i] = bArray[bIndex];
bIndex++;
}else{
// 同时耗尽,不管
}
}
System.out.println("--------------------start------------------");
Arrays.toString(combineArray);
System.out.println("--------------------end------------------");
}