输入一个数组的长度len,定义一个整型数组arr[len],通过键盘给数组填充数据,分别用归并排序法和快速排序对数组进行排序。要求写一个输出函数,用于输出排序前和排序后数组的值以做对比。C语言编写
时间: 2024-10-13 10:10:55 浏览: 29
C++两个一维数组相加求和
在C语言中,你可以按照以下步骤编写程序来实现这个需求:
```c
#include <stdio.h>
#include <stdlib.h>
// 归并排序函数
void mergeSort(int arr[], int len) {
if (len <= 1)
return;
int mid = len / 2, i, j, k;
int* left = malloc(sizeof(int) * mid);
int* right = malloc(sizeof(int) * (len - mid));
for (i = 0; i < mid; i++)
left[i] = arr[i];
for (j = mid; j < len; j++)
right[j - mid] = arr[j];
mergeSort(left, mid);
mergeSort(right, len - mid);
k = 0;
i = 0;
j = 0;
while (i < mid && j < (len - mid)) {
if (left[i] <= right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
// 把剩余部分复制回原数组
while (i < mid) {
arr[k++] = left[i++];
}
while (j < (len - mid)) {
arr[k++] = right[j++];
}
free(left);
free(right);
}
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
// 分区函数
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
// 输出数组函数
void printArray(int arr[], int len) {
printf("Original array:\n");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\nSorted array:\n");
}
int main() {
int len;
printf("Enter the length of the array: ");
scanf("%d", &len);
int* arr = malloc(sizeof(int) * len);
printf("Enter the elements: ");
for (int i = 0; i < len; i++) {
scanf("%d", &arr[i]);
}
// 先用归并排序
mergeSort(arr, len);
printArray(arr, len);
// 再用快速排序
quickSort(arr, 0, len - 1);
printArray(arr, len);
free(arr);
return 0;
}
```
阅读全文