对结构体中某一成员进行排序输出(含极值输出)
#include "std.h"
static int cmp ( const void * , const void * ) ;
typedef struct
{
char name[ 10 ] ;
int point;
char addrs[ 100 ] ;
} stu;
int main ( int argc, char * * args)
{
int ret = 0 ;
int i, j, k = 0 ;
stu stuinf[ 4 ] = { 0 } ;
int arr[ 4 ] = { 0 } ;
k = sizeof ( arr) / sizeof ( arr[ 0 ] ) ;
memcpy ( stuinf[ 0 ] . name, "xccai" , sizeof ( "xccai" ) ) ;
stuinf[ 0 ] . point = 95 ;
memcpy ( stuinf[ 0 ] . addrs, "JiangXi" , sizeof ( "JiangXi" ) ) ;
memcpy ( stuinf[ 1 ] . name, "jjxu" , sizeof ( "jhxu" ) ) ;
stuinf[ 1 ] . point = 92 ;
memcpy ( stuinf[ 1 ] . addrs, "ShangHai" , sizeof ( "ShangHai" ) ) ;
memcpy ( stuinf[ 2 ] . name, "zhdeng" , sizeof ( "zhdeng" ) ) ;
stuinf[ 2 ] . point = 99 ;
memcpy ( stuinf[ 2 ] . addrs, "FuJian" , sizeof ( "FuJian" ) ) ;
memcpy ( stuinf[ 3 ] . name, "dsliu" , sizeof ( "dsliu" ) ) ;
stuinf[ 3 ] . point = 93 ;
memcpy ( stuinf[ 3 ] . addrs, "AnHui" , sizeof ( "AnHui" ) ) ;
for ( i= 0 ; i< k; i++ )
{
arr[ i] = stuinf[ i] . point;
}
qsort ( arr, k, sizeof ( int ) , cmp) ;
for ( i= 0 ; i< k; i++ )
{
for ( j= 0 ; j< k; j++ )
{
if ( stuinf[ j] . point == arr[ i] )
{
printf ( "----第[%d]位----\n" , i+ 1 ) ;
printf ( "name=[%s],point=[%d],addres=[%s]\n" , stuinf[ j] . name, stuinf[ j] . point, stuinf[ j] . addrs) ;
break ;
}
}
if ( i== 0 )
{
printf ( "----最低分为----\n" ) ;
printf ( "name=[%s],point=[%d],addres=[%s]\n" , stuinf[ j] . name, stuinf[ j] . point, stuinf[ j] . addrs) ;
}
if ( i== k- 1 )
{
printf ( "----最高分为----\n" ) ;
printf ( "name=[%s],point=[%d],addres=[%s]\n" , stuinf[ j] . name, stuinf[ j] . point, stuinf[ j] . addrs) ;
}
}
return 0 ;
}
int cmp ( const void * a, const void * b)
{
return * ( int * ) a - * ( int * ) b;
}