在gcc编译器中将冒泡排序的代码封装成函数 my_sort 并根据执行程序时 命令行的参数 来确定升序还是降序
时间: 2024-10-17 11:04:56 浏览: 34
在GCC编译器中,你可以编写一个名为`my_sort`的函数来实现冒泡排序,并通过命令行参数来指定排序的方向。这里是一个简单的例子,我们将使用C语言作为示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义冒泡排序函数,接受一个数组指针、大小和一个标志指示升序或降序
void my_sort(int* arr, int n, bool ascending) {
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - 1 - i; ++j) {
// 如果是升序,按默认比较;如果是降序,则倒序比较
if (ascending) {
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 != 3) {
printf("Usage: %s <array> <direction>\n", argv[0]);
return 1;
}
int *arr = malloc(sizeof(int) * atoi(argv[1]));
if (!arr) {
perror("Memory allocation failed");
return 1;
}
// 将第二个参数转换为布尔值(true代表升序,false代表降序)
bool ascending = strcmp(argv[2], "asc") == 0 ? true : false;
my_sort(arr, atoi(argv[1]), ascending);
printf("Sorted array in %s order:\n", ascending ? "ascending" : "descending");
for (int i = 0; i < atoi(argv[1]); ++i) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
return 0;
}
```
在这个示例中,用户需要提供两个命令行参数:第一个参数是要排序的整数数组长度,第二个参数可以是"asc"表示升序或"desc"表示降序。如果第三个参数不是这两个之一,程序会返回错误信息。
阅读全文