原题链接: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复