qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度是n*log(n),其结构为:
void
qsort(
void
*
buffer, size_t count, size_t size,
int
(
*
compare)(
const
void
*
,
const
void
*
) );
参数:
*buffer 为要排序的数组
count 为要排序的数组的长度
size 为数组的大小
compare 为判断大小函数的指针,这个需要自己写
(很关键!)
用法:
1.对int类型数组排序
int
number[
100
];
int cmp( const void * a, const void * b)
{
return * ( int * )a -* ( int * )b; // 强制类型转换
}
qsort(number, 100 , sizeof ( int ),cmp);
int cmp( const void * a, const void * b)
{
return * ( int * )a -* ( int * )b; // 强制类型转换
}
qsort(number, 100 , sizeof ( int ),cmp);
2.对char类型数组排序
char
str[
100
];
int cmp( const void * a, const void * b)
{
return * ( char * )a -* ( char * )b; // 同int类型
}
qsort(str, 100 , sizeof ( char ),cmp);
int cmp( const void * a, const void * b)
{
return * ( char * )a -* ( char * )b; // 同int类型
}
qsort(str, 100 , sizeof ( char ),cmp);
3.对double类型数组排序
double
number[
100
];
int cmp( const void * a, const void * b)
{
return * ( double * )a >* ( double * )b ? 1 : - 1 ;
}
qsort(number, 100 , sizeof ( double ),cmp);
int cmp( const void * a, const void * b)
{
return * ( double * )a >* ( double * )b ? 1 : - 1 ;
}
qsort(number, 100 , sizeof ( double ),cmp);
4.对结构体一级排序
struct
node
{
double data;
int other;
}s[ 100 ];
// 按照data的值从小到大将s排序
int cmp( const void * a, const void * b)
{
return ( * (node * )a).data > ( * (node * )b).data ? 1 : - 1 ;
}
qsort(s, 100 , sizeof (node),cmp);
{
double data;
int other;
}s[ 100 ];
// 按照data的值从小到大将s排序
int cmp( const void * a, const void * b)
{
return ( * (node * )a).data > ( * (node * )b).data ? 1 : - 1 ;
}
qsort(s, 100 , sizeof (node),cmp);
5.对结构体二级排序
struct
node
{
int x,y;
}s[ 100 ];
int cmp( const void * a, const void * b) // 按照x从小到达排序,当x相等,y按照从大到小排
{
struct node * c = (node * )a;
struct node * d = (node * )b;
if (c -> x != d -> x)
return c -> x - d -> x; // 从小到达排序
else
return d -> y - c -> y; // 从大到小排
}
qsort(s, 100 , sizeof (node),cmp);
{
int x,y;
}s[ 100 ];
int cmp( const void * a, const void * b) // 按照x从小到达排序,当x相等,y按照从大到小排
{
struct node * c = (node * )a;
struct node * d = (node * )b;
if (c -> x != d -> x)
return c -> x - d -> x; // 从小到达排序
else
return d -> y - c -> y; // 从大到小排
}
qsort(s, 100 , sizeof (node),cmp);
6.对字符串排序
struct
STR_NODE
{
int data;
char str[ 100 ];
}s[ 100 ];
// 按照结构体中字符串str的字典顺序排序
int cmp( const void * a, const void * b)
{
return strcmp(( * (STR_NODE * )a) -> str,( * (STR_NODE * )b) -> str);
}
qsort(s, 100 , sizeof (STR_NODE),cmp);
{
int data;
char str[ 100 ];
}s[ 100 ];
// 按照结构体中字符串str的字典顺序排序
int cmp( const void * a, const void * b)
{
return strcmp(( * (STR_NODE * )a) -> str,( * (STR_NODE * )b) -> str);
}
qsort(s, 100 , sizeof (STR_NODE),cmp);