用c语言写一个merge函数其作用是将两个顺序存储的递增有序表合并成一个非递减有序表。例如,将“1,2,3,4”和“2,3,5,8,10”合并成“1,2,2,3,3,4,5,8,10”。
时间: 2023-06-08 12:06:36 浏览: 257
好的,这是一个经典的合并有序表的问题。以下是一个简单的用C语言编写的合并函数:
```c
void merge(int arr1[], int len1, int arr2[], int len2, int mergedArr[]) {
int i = 0, j = 0, k = 0;
while (i < len1 && j < len2) {
if (arr1[i] <= arr2[j]) {
mergedArr[k++] = arr1[i++];
} else {
mergedArr[k++] = arr2[j++];
}
}
// 把剩余元素拷贝到 mergedArr 中
while (i < len1) {
mergedArr[k++] = arr1[i++];
}
while (j < len2) {
mergedArr[k++] = arr2[j++];
}
}
```
这个函数接受两个有序数组 `arr1` 和 `arr2`,长度分别为 `len1` 和 `len2`。它会将这两个数组合并成一个非递减的有序数组 `mergedArr`。
函数借助 3 个指针完成任务。指针 `i` 和 `j` 分别指向两个数组的开头,指针 `k` 则用来记录 `mergedArr` 目前放入数组的元素个数。不断比较两个指针所指的元素,把更小的元素放入 `mergedArr` 中;若其中一个数组已经遍历完了,就直接把另一个数组剩余的元素全部加入到 `mergedArr` 中即可。
如果你有任何问题或者需要更详细的解释,请随时告诉我。
阅读全文