1. 程式人生 > 其它 >NC22 合併兩個有序的陣列

NC22 合併兩個有序的陣列

package NC;

/**
* NC22 合併兩個有序的陣列
*
* 給出一個整數陣列 A 和有序的整數陣列 B ,請將陣列 B 合併到陣列 A 中,變成一個有序的升序陣列
*
* 資料範圍: ,,
*
* 注意:
* 1.保證 A 陣列有足夠的空間存放 B 陣列的元素, A 和 B 中初始的元素數目分別為 m 和 n,A的陣列空間大小為 m+n
* 2.不要返回合併的陣列,將陣列 B 的資料合併到 A 裡面就好了
* 3. A 陣列在[0,m-1]的範圍也是有序的
*
* @author Tang
* @date 2021/9/29
*/
public class Merge {

/**
* 用空間換時間
*
*
* @param A
* @param m
* @param B
* @param n
*/
public void merge(int A[], int m, int B[], int n) {
int[] temp = new int[m];
for(int i = 0; i < temp.length; i++) {
temp[i] = A[i];
}

int indexB = 0;
int indexA = 0;
int index = 0;

while(index < A.length) {
if(indexB >= n) {
for(int i = indexA; i < m; i++) {
A[index] = temp[indexA];
index++;
indexA++;
}
break;
}

while(indexA < m && temp[indexA] <= B[indexB]) {
A[index] = temp[indexA];
index ++;
indexA++;
}

if(indexA >= m) {
for(int i = indexB; i < n; i++) {
A[index] = B[indexB];
index++;
indexB++;
}
break;
}

while(indexB < n && temp[indexA] >= B[indexB]) {
A[index] = B[indexB];
index++;
indexB++;
}

}


}

public static void main(String[] args) {

int A[] = {1,2,2,0,0,0};
int B[] = {3,5,6};
new Merge().merge(A,3,B,3);

}

}