📅  最后修改于: 2023-12-03 15:12:35.391000             🧑  作者: Mango
有一个长度为n的已排序的整数数组A和一个m个元素的已排序的整数数组B。数组A的大小为n+m。
请编写一个函数merge(int A[], int B[], int n, int m)
,它将数组B的元素插入到A中,并确保结果数组仍然是有序的。
A = [1, 3, 5, 7, 9], n = 5
B = [2, 4, 6, 8], m = 4
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
可以使用归并排序的思想,从后往前依次比较数组A和B中的元素,将较大的元素插入到A的末尾,直到所有元素比较完毕。
void merge(int A[], int B[], int n, int m) {
int i = n - 1; // 指向数组A的末尾
int j = m - 1; // 指向数组B的末尾
int k = n + m - 1; // 指向合并后的数组的末尾
while (i >= 0 && j >= 0) {
if (A[i] > B[j]) {
A[k] = A[i];
i--;
} else {
A[k] = B[j];
j--;
}
k--;
}
// 如果B中还有元素未插入到A中,则将其插入到A的合适位置
while (j >= 0) {
A[k] = B[j];
k--;
j--;
}
}
本道题目可以使用归并排序的思想,从后往前比较A和B中的元素,将较大的元素插入到A的末尾,直到所有元素比较完毕。