解释一下这段代码void sort(STU stu[], int n) { int select,i,j; int (*cmp)(STU a,STU b); int ScoreAsc( STU a, STU b); int ScoreDsc( STU a, STU b); int NameAsc( STU a, STU b); printf("1 按总分升序排列\n"); printf("2 按总分降序排列\n"); printf("3 按姓名排序\n"); scanf("%d",&select); switch(select) { case 1: cmp=ScoreAsc; break; case 2: cmp=ScoreDsc; break; case 3: cmp=NameAsc; break; default: return ; } for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if((*cmp)(stu[i],stu[j])>0) { STU temp; temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } output(stu,n); } int ScoreAsc(STU a, STU b) { if(a.total>b.total) return 1; else return -1; } int ScoreDsc(STU a, STU b) { if(a.total<b.total) return 1; else return -1; } int NameAsc(STU a, STU b) { return strcmp(a.name,b.name); }
时间: 2024-04-26 15:26:57 浏览: 62
void StatisticAnalysis(STU stu[], int n, int m).vsdx
这段代码实现了一个排序函数,可以对一个学生的结构体数组进行排序。函数的参数包括一个学生的结构体数组和数组的长度。排序的方式可以通过用户输入进行选择,包括按照总分升序排列、按照总分降序排列和按照姓名排序。具体的排序方式是通过函数指针来实现的,将排序方式对应的函数指针赋值给变量cmp,然后在排序过程中调用cmp函数指针即可实现不同的排序方式。在排序过程中,采用冒泡排序的方式,如果cmp函数指针返回值大于0,则交换两个元素的位置。最后,调用output函数输出排序后的结果。其中,函数ScoreAsc实现了按总分升序排序,ScoreDsc实现了按总分降序排序,NameAsc实现了按姓名排序,都是通过返回值来实现排序的。
阅读全文