使用冒泡排序,具有稳定性,平均时间复杂度为O(n*n)
#include <stdio.h>
#include <stdlib.h>
#define N 200
typedef struct student{
char name[15];
int score;
}STUDENT;
int SortDesc(int a,int b){
return a<b;
}
int SortAsc(int a,int b){
return a>b;
}
// 冒泡排序
void BubbleSort(STUDENT stu[],int n,int (*compare)(int a,int b)){
STUDENT temp;
int i,j,flag;
for(i=0;i<n-1;i++){
flag=0;
for(j=n-1;j>i;j--){
if((*compare)(stu[j-1].score ,stu[j].score)){
flag=1;
temp = stu[j-1];
stu[j-1] = stu[j];
stu[j] = temp;
}
}
if(flag==0){
break;
}
}
}
void PrintStu(STUDENT stu[],int n){
int i;
for(i=0;i<n;i++){
printf("%s %d\n",stu[i].name,stu[i].score);
}
}
int main(){
int i,j,n,sortMode;
STUDENT stu[N];
while(scanf("%d%d",&n,&sortMode)!=EOF){
for(i=0;i<n;i++){
scanf("%s",stu[i].name);
scanf("%d",&stu[i].score);
}
if(sortMode==1){
BubbleSort(stu,n,SortAsc);
}else{
BubbleSort(stu,n,SortDesc);
}
PrintStu(stu,n);
}
}