qsort用法举例,qsort
Qsort()应该只是使用的快速行。好像是以数据块的形式移动数据,速度更快。
原型:
_CRTIMP void __cdecl qsort (void*,size_t,size_t,int (*)(const void*,const void *));
解释:qsort(数组名,元素数,元素大小,比较函数)
比较函数是遵循int com(const void *a,const void *b)格式的自写函数。
当A-B关系为=,则分别返回0的正值和负值(反之亦然)。
使用b时,应强制转换类型。在响应中的类型从void *转换后,应该执行该操作。
数组下标从零开始,数字为n,下标为0-(n-1)。
示例:
int nn[100],n=100
int com(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
qsort((void *)nn,n,sizeof(int),com);
相关:
为什么一定要给出元素个数?(因为数组不知道它有多少个元素)为什么一定要给double的大小?(因为qsort不知道它要排序的单位是doubles。)为什么非要写那个难看的函数来比较doubles的值呢?(因为qsort需要一个指向函数的指针,因为它不知道要排序的元素的类型。)为什么qsort使用的比较函数接受const void* argument而不是char* argument?(因为qsort可以对不是字符串的值进行排序)比雅尼斯特劳斯特鲁普
首先,对int数组进行排序
int num[100];
样本:
int cmp(常量void *a,常量void *b)
{
return *(int *)a-*(int *)b;
}
qsort(num,100,sizeof(num[0]),CMP);
其次,对char类型的数组进行排序(与int类型相同)
char word[100];
样本:
int cmp(常量void *a,常量void *b)
{
return *(char *)a-*(int *)b;
}
qsort(word,100,sizeof(word[0]),CMP);
第三,对双数组进行排序(要特别注意)
double in[100];
int cmp(常量void *a,常量void *b)
{
return *(double *)a *(double *)b?1 : -1;
}
qsort(in,100,sizeof(in[0]),CMP);
第四,将结构排在第一级。
结构输入
{
双数据;
int other
}s[100]
//按照数据的值从小到大排序结构。结构中有多种类型的排序关键字数据。请参考上面的例子来写。
int cmp(常量void *a,常量void *b)
{
return(*(In *)a)-data(*(In *)b)-data?1 : -1;
}
qsort(s,100,sizeof(s[0]),CMP);
第五,结构的二阶。
结构输入
{
int x;
int y;
} s[100];
//按x从小到大排序,当x相等时按y从大到小排序
int cmp(常量void *a,常量void *b)
{
*c中的结构=(In *)a;
结构In * d=(In *)b;
如果(c- x!=d- x)返回c- x - d-
否则返回d- y - c-
}
qsort(s,100,sizeof(s[0]),CMP);
第六,对字符串进行排序。
结构输入
{
int数据;
字符串[100];
} s[100];
//根据字符串str在结构中的字典顺序排序
int cmp(常量void *a,常量void *b)
{
返回strcmp( (*(In *)a)- str,(*(In *)b)-str);
}
qsort(s,100,sizeof(s[0]),CMP);
自己写一个纯字符串:(temp是二维字符串数组,J是要排序的字符串总数)
int cmpstr(const void *a,const void *b)
{
返回strcmp((char*)a,(char *)b);
}
qsort(temp,j,sizeof(temp[0]),cmpstr);
七。计算几何中凸包的cmp
Int (constvoid * a,const void * b)//键cmp函数按旋转角度对除1点以外的所有点进行排序。
{
结构点*c=(点*)a;
结构点*d=(点*)b;
if( calc(*c,*d,p[1]) 0)返回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)/
返回1;
否则返回-1;
}
Qsort()是C库stdlib.h中的一个函数,需要通过比较函数进行排序;
Sort()是STL中的标准算法。
#包含stdlib.h
int cmp(常量void *a,常量void *b)
{
return *(int *)b)-*((int *)a);
}。。
qsort(q,n,sizeof(int),CMP);。
}
一维数组和字符串数组的Qsort排序;
#include stdio.h
#include stdlib.h
int a[100];
int cmp(常量void *p,常量void *q)
{
return(*(int *)p)-*((int *)q);
}
int main()
{
int n;
scanf(%d ,
for(int I=0;我我)
scanf(%d ,a[I]);
qsort((void*)a,n,sizeof(a[0]),CMP);
for(int I=0;我我)
printf(%d\n ,a[I]);
//while(1);
int cmp(常量void *p,常量void *q)
{
返回strcmp((char*)p,(char *)q);
}
int main()返回0;
}
#include stdio.h
#include stdlib.h
#include string.h
char a[20005][25];
{
int n,m,I,j;
while(1)
{
scanf(%d%d ,n,
if(n==0m==0)break;
for(I=0;我我)
{
scanf(%s ,a[I]);
}
qsort((void*)a,n,sizeof(a[0]),CMP);
for(I=0;我我)
printf(%s\n ,a[I]);
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。