用C语言将冒泡排序的代码封装成函数 my_sort 并根据执行程序时 命令行的参数 来确定升序还是降序 ./a.out -升序 ---》 升序排序 ./a.out -降序 ---》 降序排序
时间: 2024-10-17 16:09:47 浏览: 48
在C语言中,我们可以创建一个名为`my_sort`的函数,用于实现冒泡排序,并通过命令行参数动态判断排序顺序。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义冒泡排序函数,接受数组、大小和是否降序的标志
void bubble_sort(int arr[], int size, int is_descending) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (!is_descending) { // 升序模式
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
} else { // 降序模式
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
int main(int argc, char *argv[]) {
if (argc != 4 || strcmp(argv[1], "-sort") != 0) { // 检查命令行参数
printf("Usage: ./a.out -sort [asc|desc] array_size elements\n");
return 1;
}
int sort_direction = strcmp(argv[2], "desc"); // 判断排序方向
int size = atoi(argv[3]); // 转换数组大小为整数
int *arr = malloc(size * sizeof(int)); // 动态分配内存
if (arr == NULL) {
perror("Memory allocation failed");
exit(1);
}
// 从命令行读取元素并将它们放入数组
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
}
bubble_sort(arr, size, sort_direction == 0); // 调用排序函数
// ... (添加代码来打印排序后的数组)
free(arr); // 释放内存
return 0;
}
```
在这个示例中,用户需要提供四个命令行参数:`-sort`,排序方向("asc"表示升序,"desc"表示降序),数组大小以及元素值。如果提供的参数不满足要求,程序会给出错误提示。
运行例子:
```
./a.out -sort asc 5 3 1 4 2
// 或者
./a.out -sort desc 5 3 1 4 2
```
阅读全文