|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
从键盘输入某班学生某门课程的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束。本题要求实现用冒泡排序法将分数从高到低排序(并输出每趟排序结果)的函数。
输入样例:
64 85 73 99 92 -1
输出样例:
n=5
第1趟:85 73 99 92 64
第2趟:85 99 92 73 64
第3趟:99 92 85 73 64
After sort: 99 92 85 73 64
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[], int n);
void PrintScore(int score[], int n);
int main()
{
int score[N], n;
n = ReadScore(score);
printf("n=%d\n", n);
if(n)
{ DataSort(score, n);
printf("After sort: ");
PrintScore(score, n);
}
return 0;
}
/* 请在这里填写答案 */
int ReadScore(int score[])
{
int i = -1;
do{
i++;
scanf("%d", &score[i]);
}while (score[i] >= 0);
return i;
}
void PrintScore(int score[], int n)
{
int i;
for (i=0; i<n; i++)
{ if (i!=0) printf(" ");
printf("%d", score[i]);
}
printf("\n");
}
void DataSort(int score[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(score[j]>score[i])
{
temp=score[j];
score[j]=score[i];
score[i]=temp;
}
}
}
}
本帖最后由 zhangjinxuan 于 2022-11-6 21:54 编辑
我*,突然好了
- void DataSort(int score[],int n)
- {
- int i,j,temp;
- for(i=0;i<n-1;i++)
- {
- int swap = 0;
- //关键代码之一,若一轮下来无交换,swap为0(假),该处先假设swap为0,后面如果发生交换则输出,否则退出
- for(j=0;j<n-i;j++) //这里也要改
- {
- if(score[j] > score[j - 1])
- //我觉得你用的好像是选择排序,原本的判断条件是score[j]>score[i]
- //此处应该是score[j] > score[j - 1],这才是冒泡排序
- {
- temp=score[j]; //这三行也要改动
- score[j]=score[j - 1];
- score[j - 1]=temp;
- swap = 1; //发现了交换,swap = 1(真)
- }
- }
- if (swap) { //关键
- printf("第 %d 趟 :", i + 1); //输出这一趟是第 i + 1 趟
- int k = 0;
- for (; k < n; ++k) {
- printf("%d", score[k]); //输出本趟结果
- if (k != n - 1) printf(" ");
- }
- puts(""); //记得换行
- } else return; //否则未发生交换,返回退出
- }
-
- }
复制代码
@giegie666
|
|