merge函数 c语言编写.
时间: 2024-09-09 20:10:37 浏览: 40
《算法导论》的C语言实现.zip
在 C 语言中,`merge` 函数通常用于合并两个已经排序的数组。这个操作常常出现在归并排序算法中,它将两个有序数组合并成一个新的有序数组。以下是一个简单的示例 `merge` 函数的实现:
```c
#include <stdio.h>
// 定义一个辅助的比较函数,这里假设我们按升序排列
int compare(const void *a, const void *b) {
return (*(const int*)a - *(const int*)b);
}
void merge(int arr[], int left[], int leftSize, int right[], int rightSize, int arrSize) {
// 创建临时数组
int temp[arrSize];
// 当左边和右边都有元素时
while (leftSize > 0 && rightSize > 0) {
// 如果左边的元素较小,就放入临时数组,并从左边移除
if (compare(left, right) < 0) {
temp[leftSize + rightSize] = left[0];
left++;
leftSize--;
}
// 否则,右边的元素较小
else {
temp[leftSize + rightSize] = right[0];
right++;
rightSize--;
}
}
// 将剩余的元素,如果有的话,添加到临时数组的末尾
while (leftSize > 0) {
temp[leftSize + rightSize] = left[0];
left++;
leftSize--;
}
while (rightSize > 0) {
temp[leftSize + rightSize] = right[0];
right++;
rightSize--;
}
// 把临时数组的内容复制回原数组
for (int i = 0; i < arrSize; i++) {
arr[i] = temp[i];
}
}
int main() {
int left[] = {1, 4, 7};
int right[] = {2, 5, 8};
int arrSize = sizeof(left) / sizeof(left[0]);
merge(arr, left, sizeof(left), right, sizeof(right), arrSize);
for (int i = 0; i < arrSize; i++) {
printf("%d ", arr[i]); // 输出结果应为:1 2 4 5 7 8
}
return 0;
}
阅读全文