qsort是C语言中用二分法进行的快速排序,其时间复杂度为n*log(n);
库函数名为:#include<stdlib.h>
基本形式为:qsort(a,n,sizeof(..),cmp);
1:对整形数组排序
例如a[5]={1,4,3,5,2};
用函数qsort(a,5,sizeof(a[0]),cmp);
其中cmp为 函数为
cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;//要尽量强制转换类型
}
2:字符的排序
其他和整形一样,函数为
int cmp(const void *a,const void *b)
{
return *(char *)a-*(char *)b;
}
3:对于double型数据 稍有不同 原理同int这里做个注释,本来是因为要判断如果a==b返回0的,但是严格来说,两个double数是不可能相等的,只能说fabs(a-b)<1e-20之类的这样来判断,所以这里只返回了1和-1。
int cmp(const void * a, const void * b)
{
return((*(double*)a-*(double*)b>0)?1:-1);
}
4:对于二维数组的排序转化为结构体比较简单;
5:对于结构体一级排序
例:
6:对于结构体二级排序
7:对字符串进行排序
struct In
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(struct In *)a).str , (*(struct In *)b).str );
}
qsort(s,100,sizeof(s[0]),cmp);
8:二维数组进行字符串排序
比如char a[10][100];
对字符串a[0],a[1]……a[9]按字典顺序排序
int cmp(const void *a,const void *b)
{
return strcmp((char *)a,(char *)b);
}
qsort(a,10,sizeof(char)*100,cmp);
9:计算几何中求凸包的cmp
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。
0 条相关评论