方法
就是同时遍历两个数组,通过比大小,组成一个新数组;
数组参数最好带上一个长度参数,防止越界;
代码
// 合并数组;其中a,b都是从小到大有序排列的数组
void mergeList(int a[], int aLen, int b[], int bLen, int result[]) {
int p = 0; // 遍历数组a的指针
int q = 0; // 遍历数组b的指针
int i = 0; // 记录当前存储位置
// 任一数组没有到达边界则进行遍历
while (p < aLen && q < bLen) {
// 如果a数组对应位置的值小于b数组对应位置的值
if (a[p] <= b[q]) {
// 存储a数组的值
result[i] = a[p];
// 移动a数组的遍历指针
p++;
} else {
// 存储b数组的值
result[i] = b[q];
// 移动b数组的遍历指针
q++;
}
// 指向合并结果的下一个存储位置
I++;
}
// 如果a数组有剩余
while (p < aLen) {
// 将a数组剩余部分拼接到合并结果的后面
result[i] = a[p++];
I++;
}
// 如果b数组有剩余
while (q < bLen) {
// 将b数组剩余部分拼接到合并结果的后面
result[i] = b[q++];
I++;
}
}
测试代码
// 有序数组合并
- (IBAction)mergeButtonTouched:(id)sender {
int a[5] = {1,4,6,7,9};
int b[8] = {2,3,5,6,8,10,11,12};
用于存储归并结果
int result[13];
归并操作
mergeList(a, 5, b, 8, result);
打印归并结果
printf("merge result is:\n ");
for (int i = 0; i < 13; i++) {
printf("%d ", result[I]);
}
}
输出
企业微信截图_d9286d34-1947-40bd-bb21-70f286887b70.png
参考文章