*>
#*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*>;*>
}*>
*v>