C语言实现给定n个自然数,利用分治法实现归并分类。
时间: 2024-05-05 16:15:28 浏览: 101
C语言分治法实现归并排序
5星 · 资源好评率100%
以下是C语言实现给定n个自然数,利用分治法实现归并分类的代码:
```
#include <stdio.h>
void merge(int arr[], int temp[], int left, int mid, int right) {
int i = left, j = mid + 1, k = left;
while (i <= mid && j <= right) {
if (arr[i] < arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (i = left; i <= right; i++) {
arr[i] = temp[i];
}
}
void merge_sort(int arr[], int temp[], int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
merge_sort(arr, temp, left, mid);
merge_sort(arr, temp, mid + 1, right);
merge(arr, temp, left, mid, right);
}
int main() {
int n, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n], temp[n];
printf("Enter the elements: ");
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
merge_sort(arr, temp, 0, n - 1);
printf("Sorted array: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该代码首先定义了一个`merge()`函数,用于合并两个已排序的子数组。然后定义了一个`merge_sort()`函数,用于分治地将数组递归地分成两个子数组,直到每个子数组只有一个元素,然后使用`merge()`函数将两个子数组合并为一个已排序的子数组。最后在`main()`函数中读取输入数组并调用`merge_sort()`函数进行排序,最终输出排序后的数组。
阅读全文