C语言中qsort函数的用法实例详解

 更新时间:2017年10月31日 14:34:05   作者:赵子苍  
这篇文章主要介绍了C语言中qsort函数的用法实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

C语言中qsort函数的用法实例详解

快速排序是一种用的最多的排序算法,在C语言的标准库中也有快速排序的函数,下面说一下详细用法。

qsort函数包含在<stdlib.h>中

qsort函数声明如下:

void qsort(void * base,size_t nmemb,size_t size ,int(*compar)(const void *,const void *));


参数说明:

base,要排序的数组
nmemb,数组中元素的数目
size,每个数组元素占用的内存空间,可使用sizeof函数获得
compar,指向函数的指针也即函数指针。这个函数用来比较两个数组元素,第一个参数大于,等于,小于第二个参数时,分别显示正值,零,负值。

下面看几个例子:

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
#include<string.h> 
 
void main(void) 
{ 
  int i; 
  int a[10]={0,1,2,3,4,5,6,7,8,9}; 
  char b[10]={'a','b','c','d','e','f','g','h','i','j'}; 
  double c[10]={0.1,0.2,0.9,0.5,0.3,0.6,0.7,0.8,1.1,1.2}; 
  int cmp1(const void * a,const void * b) 
  { 
    return (*(int*)a-*(int*)b);//a>b 返回正值 
  } 
 
  int cmp2(const void * a,const void *b) 
  { 
    return(*(char*)a-*(char*)b); 
  } 
  int cmp3(const void * a,const void * b) 
  { 
    if(fabs(*(double*)a-*(double *)b)<1*exp(-20)) 
      return 0; 
    else 
      return(((*(double*)a-*(double*)b)>0)?1:-1); 
  } 
 
  qsort(a,10,sizeof(int),&cmp1);//对于函数指针(指向函数的指针),直接传入函数名和函数名进行& 
                 //运算都是可以的,因为在调用函数时也是取的函数的地址 
  qsort(b,10,sizeof(char),cmp2); 
  qsort(c,10,sizeof(double),cmp3); 
  for(i=0;i<10;i++) 
    printf("%d ",a[i]); 
  for(i=0;i<10;i++) 
    printf("%c ",b[i]); 
  for(i=0;i<10;i++) 
    printf("%lf ",c[i]); 
} 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 深入分析C语言存储类型与用户空间内部分布

    深入分析C语言存储类型与用户空间内部分布

    这篇文章主要介绍了C语言存储类型与用户空间内部分布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • 在C语言中调用C++做的动态链接库

    在C语言中调用C++做的动态链接库

    如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.
    2016-05-05
  • C++实现LeetCode(187.求重复的DNA序列)

    C++实现LeetCode(187.求重复的DNA序列)

    这篇文章主要介绍了C++实现LeetCode(187.求重复的DNA序列),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Linux C/C++实现DNS客户端请求域名IP的示例代码

    Linux C/C++实现DNS客户端请求域名IP的示例代码

    DNS全称:Domain Name System,域名解析系统,是互联网的一项服务,本文主要介绍了C/C++如何实现DNS客户端请求域名IP,感兴趣的可以了解下
    2024-03-03
  • C++迷宫的实现代码

    C++迷宫的实现代码

    这篇文章主要为大家详细介绍了C++实现迷宫游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++ const与constexpr区别小结

    C++ const与constexpr区别小结

    C++11标准中,const用于为修饰的变量添加只读属性,而constexpr关键字则用于指明其后是一个常量,本文主要介绍了C++ const与constexpr区别小结,感兴趣的可以了解一下
    2024-03-03
  • 利用Matlab绘制地图的超详细教程

    利用Matlab绘制地图的超详细教程

    worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域。本文将详细为大家介绍如何利用这两个函数绘制地图,需要的可以参考一下
    2022-02-02
  • VC运用OPENGL加载BMP纹理图的实现方法汇总

    VC运用OPENGL加载BMP纹理图的实现方法汇总

    这篇文章主要介绍了VC运用OPENGL加载BMP纹理图的实现方法,对于更好的了解OpenGL很有帮助,需要的朋友可以参考下
    2014-07-07
  • C++实现LeetCode(113.二叉树路径之和之二)

    C++实现LeetCode(113.二叉树路径之和之二)

    这篇文章主要介绍了C++实现LeetCode(113.二叉树路径之和之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言实现返回字符串函数的四种方法

    C语言实现返回字符串函数的四种方法

    在C语言中实现函数返回字符串,首先要确定函数返回的字符串地址的来源,一般分为四种方式,下面这篇文章就给大家通过示例代码详细介绍这几种方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12

最新评论