qsort是c编译器函数库自带的快速排序函数。用法如下:void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参 数:
1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
关于第4个参数的描述:compare( (void *) & elem1, (void *) & elem2 );
Compare 函数的返回值
|
描述
|
---|---|
< 0
|
elem1将被排在elem2前面
|
0
|
elem1 等于 elem2
|
> 0
|
elem1 将被排在elem2后面
|
举例:
对int排序:
int num[100];
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);
对结构体排序:
struct In
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
函数中使用void传参的原因是为了在C语言中实现可以传递通用参数的函数,C语言中没有泛型,因为使用void传递后强制转换。