C语言上机题目:输入一个数组的长度len,定义一个整型数组arr[len],通过键盘给数组填充数据,分别用归并排序法和快速排序对数组进行排序。要求写一个输出函数,用于输出排序前和排序后数组的值以做对比。
时间: 2024-10-13 12:16:27 浏览: 29
C++两个一维数组相加求和
在C语言中,你可以按照以下步骤完成这个上机题目:
1. 首先,你需要编写一个主函数main(),在这个函数里接收用户输入的数组长度`len`,然后动态分配内存创建整型数组`arr`。
```c
#include <stdio.h>
#include <stdlib.h>
int* create_array(int len) {
int* arr = (int*)malloc(len * sizeof(int));
if (!arr) {
printf("Memory allocation failed.\n");
return NULL;
}
// 接收用户输入并初始化数组
for (int i = 0; i < len; ++i) {
scanf("%d", &arr[i]);
}
return arr;
}
// 函数声明
void merge_sort(int[], int);
void quick_sort(int[], int, int);
// 输出函数,用于比较排序前后的数组
void print_array(int[], int len) {
printf("Original Array:\n");
for (int i = 0; i < len; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
// 对数组进行排序...
}
int main() {
int len;
printf("Enter the length of the array: ");
scanf("%d", &len);
int* arr = create_array(len);
if (arr) {
// 调用排序函数
merge_sort(arr, len);
quick_sort(arr, 0, len - 1);
// 打印排序后的数组
print_array(arr, len);
free(arr); // 释放动态分配的内存
}
return 0;
}
```
接下来,你需要实现归并排序和快速排序的函数:
**归并排序:**
```c
void merge_sort(int arr[], int n) {
if (n <= 1) {
return;
}
int mid = n / 2;
merge_sort(arr, mid);
merge_sort(arr + mid, n - mid);
merge(arr, mid, n - mid);
}
void merge(int arr[], int mid, int n) {
// ... 实现归并过程
}
```
**快速排序:**
```c
void quick_sort(int arr[], int low, int high) {
if (low < high) {
// ... 实现快速排序的核心部分,如分治策略
}
}
```
记得在`merge()`和`quick_sort()`函数内部实现具体的排序算法。
最后,在`print_array()`函数中添加对应的功能,打印出排序前和排序后的数组。
阅读全文