本文主要介绍了C语言中qsort函数使用实例的详细说明的相关资料。希望这篇文章能帮助你理解和掌握这部分内容,有需要的朋友可以参考一下。
目录
一、qsort函数原型二。1.int 2型中qsort几种常用比较函数的排序。2.double类型3的排序。3.char类型4的排序。字符串的排序:1。按首字母排序2。按字符串长度排序:摘要
一.qsort函数原型
Qsort函数:使用快速排序例程进行排序。这个函数是按照二分法编写的,它的时间复杂度是n*log(n)
#includestdlib.h
void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *))
参数:1。要排序的数组的第一个地址(可以直接输入要排序的数组名或者指向数组的指针)
2.数组中要排序的元素数量(可以通过sizeof()找到)
3.每个元素占用的空间(可以用sizeof(arr[0])来找)
4.指向函数的指针
这个qsort要求我们自己创建一个比较函数,基本上就是这个函数。
int cmp(const void* _a,const void * _ b);
二.qsort常见的几种比较函数
1.int类型的排序
int cmp(const void* _a,const void* _b)
{
int * a=(int *)_ a;
int * b=(int *)_ b;
return * a-* b;
}
int main()
{
int num[10]={ 5,7,8,1,26,52,9,3,14,56 };
int SZ=sizeof(num)/sizeof(num[0]);
qsort(num,sz,sizeof(num[0]),CMP);
int I=0;
for(I=0;我SZ;我)
{
printf('%d ',num[I]);
}
}
*a-*b这是从小到大排序的。如果要从大到小排序,就是* b-* a;
升序排序结果图:
降序排列:
int cmp(const void* _a,const void* _b)
{
int * a=(int *)_ a;
int * b=(int *)_ b;
return * B- * a;
}
int main()
{
int num[10]={ 5,7,8,1,26,52,9,3,14,56 };
int SZ=sizeof(num)/sizeof(num[0]);
qsort(num,sz,sizeof(num[0]),CMP);
int I=0;
for(I=0;我SZ;我)
{
printf('%d ',num[I]);
}
}
实际上,降序排序改为* b-* a。
降序排序效果图:
2.double类型的排序
int cmp(const void* _a,const void* _b)
{
double * a=(double *)_ a;
double * b=(double *)_ b;
return *(double*)_a *(double*)_b?1 : -1;
}
int main()
{
double num[4]={ 2.1,5.2,3.2,445.2 };
int SZ=sizeof(num)/sizeof(num[0]);
qsort(num,sz,sizeof(num[0]),CMP);
int I=0;
for(I=0;我SZ;我)
{
printf('%.2f ',num[I]);
}
}
double类型比较特殊,因为返回值是int,所以如果把两个特别相似的浮点数相减,有可能结果会大于-1小于1,这样系统会默认为0,所以这里用一个三元运算进行比较。
排序效果图:
3.char类型的排序
char cmp(const void* _a,const void* _b)
{
char * a=(char *)_ a;
char * b=(char *)_ b;
return * a-* b;
}
int main()
{
char num[4]={ 'a ',' c ',' f ',' e ' };
int SZ=sizeof(num)/sizeof(num[0]);
qsort(num,sz,sizeof(num[0]),CMP);
int I=0;
for(I=0;我SZ;我)
{
printf('%c ',num[I]);
}
}
其实chai类型和int类型差不多,比较ASCII码值,只不过char类型是字符输出。
排序效果图:
4.字符串的排序:
1.按首字母排序
#定义c 10
#定义d 10
int cmp(const void* _a,const void* _b)
{
char * a=(char *)_ a;
char * b=(char *)_ b;
return * a-* b;
}
int main()
{
char num[c][d]={'ac ',' fd ',' rbsc ',' jcse ',' efgd ',
arbs ',' bbs ',' cbfe ',' dgafg ',' ewqrta ' };
qsort(num,c,sizeof(char)*d,CMP);
int I=0;
for(I=0;IC;我)
{
printf('%s\n ',num[I]);
}
}
这种排序是通过比较首字母的ASCII码值来完成的。
排序效果图:
2.按字符串长度排序:
#定义c 10
#定义d 10
int cmp(const void* _a,const void* _b)
{
char * a=(char *)_ a;
char * b=(char *)_ b;
返回strlen(a)strlen(b)?1:-1;
}
int main()
{
char num[c][d]={ 'ac ',' fd ',' rbsc ',' jcse ',' efgd ',
arbs ',' bbs ',' cbfe ',' dgafg ',' ewqrta ' };
qsort(num,c,sizeof(char) * d,CMP);
int I=0;
for(I=0;IC;我)
{
printf('%s\n ',num[I]);
}
}
这种排序方法基于字符串的长度。
qsort正常的使用方法和场景基本都在这里了,还有就是结构的排序,这个我还没遇到,后面可能会更新。希望对大家有帮助。
总结
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。