qsort中cmp函数写法汇总
来源:互联网 发布:手机视频剪辑合成软件 编辑:程序博客网 时间:2024/05/21 09:17
函数原型:
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
参数:
base:Start of target array.
num:Array size in elements.
width:Element size in bytes.
compare:Pointer to a user-supplied routine that compares two array elements and returns a value that specifies their relationship.
这里的compare( (void *) & elem1, (void *) & elem2 )需要自己编写也正是STL库函数灵活的一个特点。有了这个,可以很轻松的对字符串数组,二维字符串数组进行字典排序,可以对结构体按照关键字进行一级排序,也可以为了使其稳定的二级或者多级排序。
Compare function return value Description
< 0 elem1 less than elem2
0 elem1 equivalent to elem2
> 0 elem1 greater than elem2
*The array is sorted in increasing order, as defined by the comparison function. To sort an array in decreasing order, reverse the sense of “greater than” and “less than” in the comparison function.
return strcmp((char *)a,(char *)b);
}//按照递增的顺序排序
int cmp(const void *a, const void *b){
return strcmp((char *)b,(char *)a);
}// 如果b>a 返回>0 则a排在b后面即按照递减的顺序排列
一、对int类型数组排序
int num[100];
Sample:
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);
二、对char类型数组排序(同int类型)
char word[100];
Sample:
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
qsort(word,100,sizeof(word[0]),cmp);
三、对double类型数组排序(特别要注意)
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp);
四、对结构体一级排序
struct In
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
int cmp( const void *a ,const void *b)
{
return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[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;
}
qsort(s,100,sizeof(s[0]),cmp);
六、对字符串进行排序
struct In
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a)->str , (*(In *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);
七、计算几何中求凸包的cmp
int cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序
{
struct point *c=(point *)a;
struct point *d=(point *)b;
if( calc(*c,*d,p[1]) < 0) return 1;
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面
return 1;
else return -1;
}
PS:
其中的qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里
- qsort中cmp函数写法汇总
- qsort中cmp函数写法汇总
- qsort()中cmp函数写法
- C++中 qsort中cmp函数写法汇总
- qsort函数cmp写法
- [c/c++]qsort中cmp函数写法
- 【C/C++】C语言中qsort的cmp函数写法汇总
- 浅谈C/C++排序函数中cmp()比较函数的写法(qsort sort函数)
- sort 和qsort函数cmp函数各种写法
- poj 2075 lightblueme double qsort cmp函数的写法
- qsort 函数中的cmp
- 关于qsort中的cmp函数
- sort()/qsort()函数的用法及cmp比较函数的写法
- qsort和sort函数中的 cmp函数
- 关于qsort中的cmp函数(网上摘录)
- 关于qsort中的cmp函数(网上摘录)
- 快排函数qsort和cmp
- C/C++中的qsort()函数及其cmp()
- 将博客搬至51CTO
- 错误报告
- 使用share SDK实现新浪微博授权登录分享(1.x版本)
- spring学习笔记(14)--AOP Annotation
- Origins of Common UI Symbols
- qsort中cmp函数写法汇总
- java之HashMap注意点
- 数组
- eclipse解决editor does not contain a main type的方法
- 第6周作业3-Fibonacci数列
- 多线程同步
- 骨架提取——Khalid Sheed的K3M算法
- 莱斯大学Python课程Mini-project # 1- Rock-paper-scissors-lizard-Spock
- ASIHTTPRequest下载地址和类库配置步骤