7-1:模拟Excel排序 (考查快速排序的库函数调用)

    xiaoxiao2022-07-02  112

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 100000 #define MAXID 6 #define MAXNAME 8 struct Student{ char id[MAXID+1]; char name[MAXNAME+1]; int grade; }Record[MAXN]; int ComparId(const void *a,const void *b); int ComparName(const void *a,const void *b); int ComparGrade(const void *a,const void *b); int main(void) { int i,N,C; scanf("%d %d",&N,&C); for (i=0;i<N;i++) scanf("%s %s %d",Record[i].id,Record[i].name,&Record[i].grade); switch(C) { case 1:qsort(Record,N,sizeof(struct Student),ComparId); break; case 2:qsort(Record,N,sizeof(struct Student),ComparName); break; case 3:qsort(Record,N,sizeof(struct Student),ComparGrade); break; } for (i=0;i<N;i++) printf("%s %s %d\n",Record[i].id,Record[i].name,Record[i].grade); return 0; } int ComparId(const void *a,const void *b) { return strcmp(((const struct Student*)a)->id,((const struct Student*)b)->id); } int ComparName(const void *a,const void *b) { int k; k=strcmp(((const struct Student*)a)->name,((const struct Student*)b)->name); if (!k) k=strcmp(((const struct Student*)a)->id,((const struct Student*)b)->id); return k; } int ComparGrade(const void *a,const void *b) { int k; k=((const struct Student*)a)->grade-((const struct Student*)b)->grade; if (!k) k=strcmp(((const struct Student*)a)->id,((const struct Student*)b)->id); return k; }

    stdlib.h中的qsort函数采用了优化实现的快速排序算法,其调用格式为:qsort(数组名,元素个数,sizeof(数组元素类型),比较大小的函数); 其中用于比较大小的函数由用户自行定义,该函数接受两个指向待比较元素的指针*a和*b,返回一个整数。当要求按递增排序时,返回正数表示*a的分量比*b的大、负数反之、0表示相等

    最新回复(0)