使用冒泡排序,具有稳定性,平均时间复杂度为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);
    }
}