首页 > 编程语言 > 详细

十七、函数指针高级(动态排序)

时间:2016-01-30 13:40:12      阅读:322      评论:0      收藏:0      [点我收藏+]
1.学生结构体数组,按成绩排序、按年龄排序,按名字大小排序
示例:
typedef struct stu{//定义一个结构体变量
     char name[40];
     int age;
     float score;
}Student;
 
void printfStudents(Student *s , int count);
void printfStudents(Student *s , int count){//打印结构体数组
     printf(“========================\n”);
     for(int i = 0 ; i < count ; i ++){
          printf(“%s %d %f\n”,s[i].name,s[i].age,s[i].score);
     }
     printf(“=========================\n”);
}
typedef BOOL(*SORT)(Student s1 , Student s2);//用typedef定义一个布尔值的函数指针
 
BOOL sortUseAge(Student s1 , Student s2);
BOOL sortUseAge(Student s1 , Student s2){//布尔值类型的函数,年龄
     return s1.age > s2.age;
}
 
BOOL sortUseScore(Student s1 , Student s2);
BOOL sortUseScore(Student s1 , Student s2){//布尔值类型的函数,分数
     return s1.Score > s2.Score;
}
 
BOOL sortUseName(Student s1 , Student s2);
BOOL sortUseName(Student s1 , Student s2){//布尔值类型的函数,名字
     return strcpy(s1.name , s2.name) > 0?YES : NO;
}
 
//旧方法对比
//void sort(Student *s , int count);
//void sort(Student *s , int count){
//     for(int i = 0 ; i < count - 1 ; i ++){
//          for(int j = 0 ; j < count - 1 - i ; j ++){
//               if(s[j].age > s[j+1].age){
//                   Student temp = s[j];
//                    s[j] = s[j+1];
//                    s[j+1] = temp;
//               }
//          }
//     }
//}
 
void sort(Student *s , int count , SORT st);//回调函数
void sort(Student *s , int count , SORT st){
     for(int i = 0 ; i < count - 1 ; i ++){
          for(int j = 0 ; j < count - 1 - i ; j ++){
               if(st(s[j] , s[j+1])){
                   Student temp = s[j];//此处应该借鉴
                    s[j] = s[j+1];
                    s[j+1] = temp;
               }
          }
     }
}
 
int main(){
     Student stuff[] = {
          {“zhangsan”,23,89},
          {“lisi”,25,72},
          {“wangle”,18,93},
          {“zhaoda”,20,65}
     }
     printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
     sort(stus, sizeof(stus) / sizeof(stuff[0]) , sortUseAge);//按年龄排序
     printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
     sort(stus, sizeof(stus) / sizeof(stuff[0]) , sortUseScore);//按分数排序
     printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
     sort(stus, sizeof(stus) / sizeof(stuff[0]) , sortUseName);//按名字排序
     printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
}

十七、函数指针高级(动态排序)

原文:http://www.cnblogs.com/gnhxsk/p/5170678.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!