这是对《啊哈!算法》第一节第一个桶排序的程序的改进。
输入的成绩只能是0~10分,可以编译玩一玩。
#include <stdio.h>
void ducj(int arr[], int);//读成绩
void dycj(int arr[]);//打印成绩
int main(void)
{
int arr[11] = {0};//一共0~10分
int ncj;//要读多少个人的成绩
printf("有多少个学生的成绩:");
scanf("%d", &ncj);
ducj(arr, ncj);
dycj(arr);
}
void ducj(int arr[], int n)
{
int cj;
for(int i = 0; i < n ; i++)
{
printf("请输入成绩:");
scanf("%d", &cj);
arr[cj]++;//得这个成绩的人+1
printf("arr[%d] = %d\n", cj, arr[cj]);
}
}
void dycj(int arr[])//还没想到更好的
{
printf("他们的成绩由小到大排序如下:");
for(int i = 0; i <= 10; i++)
for(int j = 1; j <= arr[i]; j++)
printf("%d ", i);
}
只是改一下for语句就可以从大到小排序。
#include <stdio.h>
void ducj(int arr[], int);
void dycj(int arr[]);
int main(void)
{
int arr[11] = {0};//一共0~10分
int ncj;//要读多少个人的成绩
printf("有多少个学生的成绩:");
scanf("%d", &ncj);
ducj(arr, ncj);
dycj(arr);
}
void ducj(int arr[], int n)
{
int cj;
for(int i = 0; i < n ; i++)
{
printf("请输入成绩:");
scanf("%d", &cj);
arr[cj]++;//得这个成绩的人+1
printf("arr[%d] = %d\n", cj, arr[cj]);
}
}
void dycj(int arr[])//还没想到更好的
{
printf("他们的成绩由大到小排序如下:");
for(int i = 10; i >= 0; i--)
for(int j = 1; j <= arr[i]; j++)
printf("%d ", i);
}
网友评论