输入描述:两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:输出成绩最高的前五个,用空格分隔。
具体代码:
方法一:冒泡排序
#include <stdio.h>
int main()
{
int arr[40] = {0};
int i = 0;
int n = 0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
} //接受用户输入的成绩
for(i=0;i<n-1;i++) //冒泡排序算法
{
int j =0;
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1]) //相邻元素进行比较
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(i=n-1;i>=n-5;i--) //降序输出
{
printf("%d\n",arr[i]);
}
return 0;
}
什么是冒泡排序,该如何使用呢?
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历待排序序列,通过相邻元素的比较和交换来将最大元素或最小元素逐渐移动到序列的一端。
冒泡排序的基本思想是,比较相邻的两个元素,如果它们的顺序不满足要求,则进行交换。通过多次遍历,每次都会将未排序部分的最大元素(或最小元素)“冒泡”到合适的位置。
以下是冒泡排序的一般步骤:
- 从序列的第一个元素开始,比较相邻的两个元素。
- 如果前一个元素大于后一个元素(对于升序排序),则进行交换,确保较大的元素向后移动。
- 继续向后遍历序列,重复执行步骤 1 和步骤 2,直到达到序列的倒数第二个元素。
- 重复以上步骤,每次遍历都将最大的元素移动到序列的末尾。
- 重复上述步骤,直到整个序列排序完成。
使用qsort算法:
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
int main()
{
int arr[40] = {0};
int i = 0;
int n = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
qsort(arr, n, 4, cmp_int);
for (i = n - 1; i >= n - 5; i--)
{
printf("%d\n", arr[i]);
}
return 0;
}
什么是qsort,怎么使用它?
qsort是C语言中的一个标准库函数,用于对数组进行快速排序。它可以用于排序各种类型的元素,包括整数、浮点数、字符、自定义结构等。
qsort 函数的声明如下:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
参数说明:
- `base`:待排序数组的起始地址。
- `nmemb`:待排序数组的元素个数。
- `size`:数组元素的大小,以字节为单位。
- `compar`:指向比较函数的指针,用于指定排序的顺序。该函数接受两个指向待比较元素的指针,并返回一个整数表示它们的比较结果。
比较函数的声明如下:
int compar(const void *a, const void *b);
比较函数接受两个指向待比较元素的指针,按照特定的规则比较它们,并返回一个整数值来表示它们的关系。返回值的含义如下:
- 小于0:表示第一个元素应该在第二个元素之前。
- 等于0:表示两个元素相等,顺序无关紧要。
- 大于0:表示第一个元素应该在第二个元素之后。
需要注意的是,使用 `qsort` 函数时需要确保比较函数的逻辑正确,否则可能导致不正确的排序结果。另外,`qsort` 函数是一种原地排序算法,会直接修改原数组内容。