qsort 的用法:
int compare ( const void * a, const void * b)
{
return ( * ( int * ) a - * ( int * ) b) ;
}
int main ( )
{
float arr[ 8 ] = { 3 , 5 , 6 , 4 , 2 , 5 , 6 , 9 } ;
int a = sizeof ( arr) / sizeof arr[ 0 ] ;
qsort ( arr, a, sizeof ( arr[ 0 ] ) , compare) ;
int i = 0 ;
for ( i = 0 ; i < 8 ; i++ )
printf ( "%f \n" , * ( arr + i) ) ;
return 0 ;
}
模拟实现用qsort对float数据的排序
void swap ( char * ar1, char * ar2, int leng)
{
int i = 0 ;
for ( ; i < leng; i++ )
{
char str = * ar1;
* ar1 = * ar2;
* ar2 = str;
ar1++ ;
ar2++ ;
}
}
int compare ( void * e1, void * e2)
{
return ( int ) ( * ( float * ) e1 - * ( float * ) e2) ;
}
void my_qsort ( void * arr, int sz, int leng, int ( * cmp) ( void * e1, void * e2) )
{
int i = 0 ;
for ( ; i < sz - 1 ; i++ )
{
int j = 0 ;
for ( ; j < sz - i - 1 ; j++ )
{
if ( cmp ( ( char * ) arr + j * leng, ( char * ) arr + ( j + 1 ) * leng) > 0 )
{
swap ( ( char * ) arr + j * leng, ( char * ) arr + ( j + 1 ) * leng, leng) ;
}
}
}
}
int main ( )
{
float arr[ 8 ] = { 3 , 5 , 6 , 4 , 2 , 5 , 6 , 9 } ;
int a = sizeof ( arr) / sizeof arr[ 0 ] ;
my_qsort ( arr, a, sizeof ( arr[ 0 ] ) , compare) ;
int i = 0 ;
for ( i = 0 ; i < 8 ; i++ )
{
printf ( "%f \n" , * ( arr + i) ) ;
}
return 0 ;
}
模拟实现用qsort对结构体数据的排序
struct students
{
char NAME[ 20 ] ;
int a;
char ID[ 5 ] ;
} ;
void swap ( char * ar1, char * ar2, int leng)
{
int i = 0 ;
for ( ; i < leng; i++ )
{
char str = * ar1;
* ar1 = * ar2;
* ar2 = str;
ar1++ ;
ar2++ ;
}
}
int compare ( void * e1, void * e2)
{
return ( int ) strcmp ( ( ( struct students* ) e1) -> NAME , ( ( struct students* ) e2) -> NAME) ;
}
void myqsort ( void * arr, int sz, int leng, int ( * cmp) ( void * e1, void * e2) )
{
int i = 0 ;
for ( ; i < sz - 1 ; i++ )
{
int j = 0 ;
for ( ; j < sz - i - 1 ; j++ )
{
if ( cmp ( ( char * ) arr + j * leng, ( char * ) arr + ( j + 1 ) * leng) > 0 )
{
swap ( ( char * ) arr + j * leng, ( char * ) arr + ( j + 1 ) * leng, leng) ;
}
}
}
}
int main ( )
{
struct students arr[ 3 ] = { { "zhangsan" , 12 , "3333" } , { "lisi" , 17 , "4444" } , { "wangwu" , 15 , "5555" } } ;
int a = sizeof ( arr) / sizeof arr[ 0 ] ;
myqsort ( arr, a, sizeof ( arr[ 0 ] ) , compare) ;
return 0 ;
}