#*mport&*bsp;<Fou*dat*o*/Fou*dat*o*.h&*t;
//定义一个结构体,使用函数回调实现动态排序(年龄.姓名.分数)
typedef&*bsp;struct&*bsp;stude*t{
&*bsp; &*bsp;&*bsp;char&*bsp;*ame[50];
&*bsp; &*bsp;&*bsp;**t&*bsp;a*e;
&*bsp; &*bsp;&*bsp;float&*bsp;score;
}Stude*t;
BOOL&*bsp;compareName(Stude*t&*bsp;stu1,Stude*t&*bsp;stu2);&*bsp;&*bsp;//声明
BOOL&*bsp;compareName(Stude*t&*bsp;stu1,Stude*t&*bsp;stu2){&*bsp;&*bsp;//按姓名排序实现
&*bsp; &*bsp;&*bsp;retur*&*bsp;strcmp(stu1.*ame,
stu2.*ame);
}
BOOL&*bsp;compareA*e(Stude*t&*bsp;stu1,Stude*t&*bsp;stu2);
&*bsp;&*bsp;//声明
BOOL&*bsp;compareA*e(Stude*t&*bsp;stu1,Stude*t&*bsp;stu2){
&*bsp;&*bsp;//按年龄排序实现
&*bsp; &*bsp;&*bsp;retur*&*bsp;stu1.a*e&*t;stu2.a*e?YES:NO;
}
BOOL&*bsp;compareScore(Stude*t&*bsp;stu1,Stude*t&*bsp;stu2);
&*bsp;&*bsp;//声明
BOOL&*bsp;compareScore(Stude*t&*bsp;stu1,Stude*t&*bsp;stu2){
&*bsp;&*bsp;//按分数排序实现
&*bsp; &*bsp;&*bsp;retur*&*bsp;stu1.score&*t;stu2.score?YES:NO;
}
vo*d&*bsp;bubbleArray(Stude*t&*bsp;*a,**t&*bsp;cou*t,BOOL&*bsp;(*p)(Stude*t,Stude*t));
vo*d&*bsp;bubbleArray(Stude*t&*bsp;*a,**t&*bsp;cou*t,BOOL&*bsp;(*p)(Stude*t,Stude*t)){&*bsp;
&*bsp;&*bsp;//运行时函数,参数:一个指针变量,一个长度,一个函数指针
&*bsp; &*bsp;&*bsp;for&*bsp;(**t&*bsp;*=0;
*<cou*t-1; *++) {
&*bsp; &*bsp; &*bsp; &*bsp;&*bsp;for&*bsp;(**t&*bsp;j=0;
j<cou*t-1-*; j++) {
&*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp;&*bsp;*f&*bsp;(p(a[ j ],a[j+1]))
{&*bsp; &*bsp;&*bsp;//由参数函数指针所指向的函数决定按什么类型排序
&*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp;&*bsp;Stude*t&*bsp;temp=a [ j ];
&*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; a[ j ]=a[j+1];
&*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; a[j+1]=temp;
&*bsp; &*bsp; &*bsp; &*bsp; &*bsp; &*bsp; }
&*bsp; &*bsp; &*bsp; &*bsp; }
&*bsp; &*bsp; }
&*bsp; &*bsp;&*bsp;for&*bsp;(**t&*bsp;*=0;
*<cou*t; *++) { &*bsp;&*bsp;//遍历
&*bsp; &*bsp; &*bsp; &*bsp;&*bsp;pr**tf("%s
%d %.2f \*",a[ * ].*ame,a[ * ].a*e,a[
* ].score);
&*bsp; &*bsp; }
}
**t&*bsp;ma**(**t&*bsp;ar*c,&*bsp;co*st&*bsp;char&*bsp;*
ar*v[]) {
&*bsp; &*bsp;&*bsp;Stude*t&*bsp;stuArray[&*bsp;5&*bsp;]={
&*bsp;&*bsp;//定义一个结构体数组
&*bsp; &*bsp; &*bsp; &*bsp; {"x*j**p***",98,80.0},
&*bsp; &*bsp; &*bsp; &*bsp; {"aobama",75,60.1},
&*bsp; &*bsp; &*bsp; &*bsp; {"be*lade**",55,56.3},
&*bsp; &*bsp; &*bsp; &*bsp; {"puj***",58,88.6},
&*bsp; &*bsp; &*bsp; &*bsp; {"che***ua*",63,98.0}
&*bsp; &*bsp; };
&*bsp; &*bsp;&*bsp;BOOL&*bsp;(*p)(Stude*t,Stude*t)=NULL;&*bsp;
&*bsp;&*bsp;//函数指针初始化
&*bsp; &*bsp; p=compareA*e; &*bsp; &*bsp;&*bsp;//为函数指针赋值,指向的是函数compareA*e的地址
&*bsp; &*bsp;&*bsp;//&*bsp; &*bsp; p=compareName;
&*bsp; &*bsp;&*bsp;//&*bsp; &*bsp; p=compareScore;
&*bsp; &*bsp;&*bsp;bubbleArray(stuArray,&*bsp;5,
p); &*bsp;&*bsp;//调用函数
&*bsp; &*bsp;&*bsp;retur*&*bsp;0;
}