,,C语言之qsort函数详解

,,C语言之qsort函数详解

本文主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: