世家魏晋男主小说重生:如何用C语言排序?

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 05:42:12
我编了一个小程序,里面有一个结构体struct student,里面有学号no,姓名name,性别sex,年龄age,成绩ji.
当我输入多组数据时我想按照学号排序怎么排?
比如有三组数据如下:
3 xia m 22 99
1 feng f 20 88
2 chen m 22 77
学号不是按顺序排列的,现在我想用一个函数将所有学生信息按照学号排序并保存!
请用C语言2.1以下写出来,不要用其他的语言写,写的好的我会再加分!谢谢!

void Sort(struct student Stu[])
{ int ChoiceNumber,i,j;
int UpOrDown;
char sign;
do{
do{
system("cls");
printf("\n\t\t※※※※※※※※ 信 息 排 序 ※※※※※※※※\n");
Output(Stu);
printf("\t └———————————————————————┘\n");
printf("\n\t ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓\n");
printf("\t ┃ 1:按学号 ┃ 2:按姓名 ┃ 3:按性别 ┃ 4:按成绩 ┃\n");
printf("\t ┗━━━━━┻━━━━━┻━━━━━┻━━━━━┛\n");
printf("\n『请输入(1~4)』 ");
ChoiceNumber=0;
scanf("%d",&ChoiceNumber);
getchar();
if(ChoiceNumber<1||ChoiceNumber>4)
{ printf("\n『您的输入有误,请按任意键重新输入!』 ");
getchar();
}
else
break;
}while(1);
switch (ChoiceNumber)
{
case 1:
for(i=1;i<Number;i++)
for(j=1;j<=Number-i;j++)
{ if(Stu[j].Num>Stu[j+1].Num)
{ Stu[0]=Stu[j];
Stu[j]=Stu[j+1];
Stu[j+1]=Stu[0];
}
}
break;
case 2:
for(i=1;i<Number;i++)
for(j=1;j<=Number-i;j++)
{ if(strcmp(Stu[j].Name,Stu[j+1].Name)>0)
{ Stu[0]=Stu[j];
Stu[j]=Stu[j+1];
Stu[j+1]=Stu[0];
}
}
break;
case 3:
for(i=1;i<Number;i++)
for(j=1;j<=Number-i;j++)
{ if(strcmp(Stu[j].Sex,Stu[j+1].Sex)>0)
{ Stu[0]=Stu[j];
Stu[j]=Stu[j+1];
Stu[j+1]=Stu[0];
}
}
break;
case 4:
{ UpOrDown=0;
do{
system("cls");
printf("\n\t\t※※※※※※※※ 成 绩 排 序 ※※※※※※※※\n");
Output(Stu);
printf("\t └———————————————————————┘\n");
printf("\n\t ┏━━━━━┳━━━━━┳━━━━━━┓\n");
printf("\t ┃ 1:按SQL ┃ 2:按VB ┃ 3:按C语言 ┃\n");
printf("\t ┗━━━━━┻━━━━━┻━━━━━━┛\n");
printf("\n『请输入(1~3)』 ");
ChoiceNumber=0;
scanf("%d",&ChoiceNumber);
getchar();
if(ChoiceNumber<1||ChoiceNumber>3)
{ printf("\n『您的输入有误,请按任意键重新输入!』 ");
getchar();
}
else
break;
}while(1);
do{
printf("\n\t ┏━━━━━┳━━━━━┓\n");
printf("\t ┃ 1:升序 ┃ 2:降序 ┃\n");
printf("\t ┗━━━━━┻━━━━━┛\n");
printf("\n『请选择:』");
UpOrDown=0;
scanf("%d",&UpOrDown);
getchar();
if(UpOrDown==1)
{ for(i=1;i<Number;i++)
for(j=1;j<=Number-i;j++)
{ if(Stu[j].Score[ChoiceNumber-1]>Stu[j+1].Score[ChoiceNumber-1])
{ Stu[0]=Stu[j];
Stu[j]=Stu[j+1];
Stu[j+1]=Stu[0];
}
}
break;
}
else if(UpOrDown==2)
{ for(i=1;i<Number;i++)
for(j=1;j<=Number-i;j++)
{ if(Stu[j].Score[ChoiceNumber-1]<Stu[j+1].Score[ChoiceNumber-1])
{ Stu[0]=Stu[j];
Stu[j]=Stu[j+1];
Stu[j+1]=Stu[0];
}
}
break;
}
else
{ printf("\n『您的输入有误,请按任意键重新输入!』 ");
getchar();
}
}while(1);
}
}
Output(Stu);
printf("\t └———————————————————————┘\n");
printf("\n『排序完成,按Y继续,按任意键退回主菜单...』");
sign=getch();
}while(sign=='y'||sign=='Y');
}