(C)qsort 用法

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);
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);
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);
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);
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);
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);
转自网络
posted @ 2011-02-24 14:36  leo.ch  阅读(399)  评论(0编辑  收藏  举报