qsort(a,m,sizeof(a[0]),cmp); 数组首地址,数组大小,数据大小,cmp函数;
cmpare函数
一、对int类型数组排序 (从小到大排)
从大到小排的话改成d-c;
int cmp(const void *a,const void *b){
int *c = (int *)a;
int *d = (int *)b;
return *c - *d;
}
二、对char类型数组排序(同int类型)
int cmp(const void *a,const void *b){
char *c = (char *)a;
char *d = (char *)b;
return *c - *d;
}
三、对double类型数组排序(特别要注意)
int cmp(const void *a,const void *b){
float *c = (float *)a;
float *d = (float *)b;
if(*c-*d > 0)return 1;
else return -1;
}
四、对结构体二级排序
int cmp(const void *a,const void *b)
{
node *c = (node *)a;
node *d = (node *)b;
if(c->w != d->w)return c->w - d->w;//从小到大排
else return c->v - d->v;
}
五、对结构体三级排序
int cmp(const void *a,const void *b)
{
node *c = (node *)a;
node *d = (node *)b;
if(c->w != d->w)return c->w - d->w;//从小到大排
else if(c->u != d->u)return c->u -d->u;
else return c->v - d->v;
}
六、对结构体中字符串按字典顺序排序
struct node {
int data;
char str[100];
}s[100];
int cmp(const void *a,const void *b)
{
node *c = (node *)a;
node *d = (node *)b;
//按照结构体中字符串str的字典顺序排序
return strcmp(c->str,d->str);
}
//对结构体排序