原题链接:C语言训练-排序问题(2)
解题思路:
注意事项:
参考代码:
方法1:使用冒泡排序
#include // 冒泡排序函数 void bubbleSort(int arr[], int n) { int temp; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (arr[j] < arr[j + 1]) { // 按从大到小排序,如果前一个元素小于后一个元素,则交换它们 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[10]; // 从用户输入读取10个整数并存储在数组中 for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } // 使用冒泡排序将数组按从大到小排序 bubbleSort(arr, 10); // 打印排序后的数组 for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
方法2:使用选择排序
#include // 选择排序函数 void selectionSort(int arr[], int n) { int temp; for (int i = 0; i < n - 1; i++) { int maxIndex = i; // 假定当前未排序部分的第一个元素是最大的 for (int j = i + 1; j < n; j++) { if (arr[j] > arr[maxIndex]) { // 找到更大的元素 maxIndex = j; } } // 将最大的元素与未排序部分的第一个元素交换 temp = arr[i]; arr[i] = arr[maxIndex]; arr[maxIndex] = temp; } } int main() { int arr[10]; // 从用户输入读取10个整数并存储在数组中 for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } // 使用选择排序将数组按从大到小排序 selectionSort(arr, 10); // 打印排序后的数组 for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
方法3:使用qsort快速排序函数
qsort 函数是C标准库中用于进行快速排序的函数,它允许你对一个数组中的元素进行排序。以下是 qsort 函数的基本用法:
void qsort(void *base, size_t numElements, size_t sizeOfElement, int (*comparator)(const void *, const void *));
下面是各个参数的解释:
base:指向要排序的数组的起始地址的指针。
numElements:数组中的元素数量。
sizeOfElement:每个元素的大小(以字节为单位)。
comparator:比较函数的指针,用于确定元素的相对顺序。
比较函数 comparator 接受两个 const void * 类型的指针参数,这两个指针分别指向数组中的两个元素。比较函数返回一个整数值,用于表示这两个元素的相对顺序。根据返回值的不同,qsort 函数会按升序或降序对数组中的元素进行排序。
如果比较函数返回负值,表示第一个元素应该排在第二个元素之前。
如果比较函数返回正值,表示第一个元素应该排在第二个元素之后。
如果比较函数返回零,表示两个元素相等,它们的相对位置不变。
#include #include // 比较函数,用于qsort排序 int compare(const void *a, const void *b) { int num1 = *(int*)a; // 将a转换为int指针,然后获取值 int num2 = *(int*)b; // 将b转换为int指针,然后获取值 if (num1 < num2) { return 1; // 如果num1小于num2,返回1,表示应该交换它们的位置 } else if (num1 > num2) { return -1; // 如果num1大于num2,返回-1,表示不需要交换它们的位置 } else { return 0; // 如果num1等于num2,返回0,表示它们相等 } } int main() { int arr[10]; // 从用户输入读取10个整数并存储在数组中 for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } // 使用qsort对数组进行排序,使用自定义的compare函数进行比较 qsort(arr, 10, sizeof(arr[0]), compare); // 打印排序后的数组 for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复