C对输入的N个数用合并排序实现递增排序的代码
时间: 2024-09-28 22:13:46 浏览: 31
Python对两个有序列表进行合并和排序的例子
在C语言中,合并排序是一种分治算法,可以有效地对数组进行递增排序。以下是使用合并排序思想对N个整数进行递增排序的基本步骤和代码示例:
```c
#include <stdio.h>
// 分治函数,将两个已排序的子数组合并成一个有序数组
void merge(int arr[], int left[], int leftSize, int right[], int rightSize) {
int i = 0, j = 0, k = 0;
// 当左、右两个子数组都还有元素时
while (i < leftSize && j < rightSize) {
if (left[i] <= right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
// 将剩余的左边元素复制到结果数组
while (i < leftSize) {
arr[k++] = left[i++];
}
// 将剩余的右边元素复制到结果数组
while (j < rightSize) {
arr[k++] = right[j++];
}
}
// 合并排序的主函数
void mergeSort(int arr[], int n) {
if (n < 2) return; // 如果只有一个元素,无需排序
int mid = n / 2;
int left[mid], right[n - mid];
// 分割数组
for (int i = 0; i < mid; i++) {
left[i] = arr[i];
}
for (int i = mid; i < n; i++) {
right[i - mid] = arr[i];
}
// 对左右两部分分别进行递归排序
mergeSort(left, mid);
mergeSort(right, n - mid);
// 合并两个已排序的部分
merge(arr, left, mid, right, n - mid);
}
int main() {
int N, num[100]; // 假设最多有100个整数
printf("Enter the number of elements: ");
scanf("%d", &N);
printf("Enter %d numbers: ", N);
for (int i = 0; i < N; i++) {
scanf("%d", &num[i]);
}
// 使用mergeSort函数进行排序
mergeSort(num, N);
// 输出排序后的数组
for (int i = 0; i < N; i++) {
printf("%d ", num[i]);
}
printf("\n");
return 0;
}
```
这个程序首先获取用户输入的整数数量和数值,然后通过`mergeSort`函数进行递归分割和合并操作,最后输出排序后的结果。
阅读全文