本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值。

分享给大家供大家参考。C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序。


函数声明

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

参数

  • base-- 指向要排序的数组的第一个元素的指针。

  • nitems-- 由 base 指向的数组中元素的个数。

  • size-- 数组中每个元素的大小,以字节为单位。

  • compar-- 用来比较两个元素的函数,即函数指针(回调函数)

回调函数:

回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。 [2]

compar参数

compar参数指向一个比较两个元素的函数。比较函数的原型应该像下面这样。注意两个形参必须是const void *型,同时在调用compar 函数(compar实质为函数指针,这里称它所指向的函数也为compar)时,传入的实参也必须转换成const void *型。在compar函数内部会将const void *型转换成实际类型。

int compar(const void *p1, const void *p2);

如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左面;
如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定;
如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右面

一、对int类型数组排序

1

2

3

4

5

6

7

int num[100];

int cmp ( const void *a , const void *b )

{

  return *(int *)a - *(int *)b;

}

qsort(num,100,sizeof(num[0]),cmp);

二、对char类型数组排序(同int类型)

1

2

3

4

5

6

7

char word[100];

int cmp( const void *a , const void *b )

{

  return *(char *)a - *(char *)b;

}

qsort(word,100,sizeof(word[0]),cmp);

三、对double类型数组排序(特别要注意)

1

2

3

4

5

6

7

double in[100];

int cmp( const void *a , const void *b )

{

  return *(double *)a > *(double *)b ? 1 : -1;

}

qsort(in,100,sizeof(in[0]),cmp);

四、对结构体一级排序

1

2

3

4

5

6

7

8

9

10

11

struct In

{

  double data;

   int other;

}s[100];

int cmp( const void *a ,const void *b)

{

  return (*(struct In *)a)->data > (*(struct In *)b)->data ? 1 : -1;

}

qsort(s,100,sizeof(s[0]),cmp);

 五、对结构体二级排序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

struct In

{

  int x;

  int y;

}s[100];

//按照x从小到大排序,当x相等时按照y从大到小排序

int cmp( const void *a , const void *b )

{

  struct In *c = (struct In *)a;

  struct In *d = (struct In *)b;

  if(c->x != d->x) return c->x - d->x;

  else return d->y - c->y;

}

qsort(s,100,sizeof(s[0]),cmp);

 六、对字符串进行排序 

1

2

3

4

5

6

7

8

9

10

11

12

struct In

{

  int data;

  char str[100];

}s[100];

//按照结构体中字符串str的字典顺序排序

int cmp ( const void *a , const void *b )

{

  return strcmp( (*(struct In *)a)->str , (*(struct In *)b)->str );

}

qsort(s,100,sizeof(s[0]),cmp);

相信本文所述实例对大家C程序设计的学习有一定的借鉴价值。

《编译学习计划【第一季】》- C语言中的qsort函数相关推荐

  1. 详解c语言中的qsort函数(有图)

    目录 目录 一.qsort函数是什么 1.自定义冒泡函数时遇到的问题 2.qsort函数的作用 (1)int整形数组排序(2)浮点型数组排序(3)字符数组排序 (4)结构体排序 二.qsort函数的原 ...

  2. c语言fputc 函数头,简单对比C语言中的fputs()函数和fputc()函数

    简单对比C语言中的fputs()函数和fputc()函数 C语言fputc()函数:写文件函数(将一指定字符写入文件流中) 头文件: #include 定义函数: int fputc(int c, F ...

  3. C语言 SLEEP函数不起作用,C语言中的sleep() 函数 sleep函数的具体用法

    导航:网站首页 > C语言中的sleep() 函数 sleep函数的具体用法 C语言中的sleep() 函数 sleep函数的具体用法 相关问题: 匿名网友: 关于sleep()函数在windo ...

  4. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  5. C语言中itoa系列函数及sprintf系列函数使用详解

    C语言中itoa系列函数及sprintf系列函数使用详解 itoa函数系列 该系列函数是广泛使用的非标准C语言和C++语言扩展功能,只能在windows编译器下使用,如果涉及到跨平台是不允许使用的,这 ...

  6. c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  7. c语言中的printf函数_C语言中的printf()函数与示例

    c语言中的printf函数 C语言中的printf()函数 (printf() function in C) The printf() function is defined in the <s ...

  8. C语言中的atoi函数的实现

    C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个 ...

  9. C语言中的sprint函数,求sprintf函数的详解

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:求sprintf函数的详解,要附带例,粘贴来的也可以,只 问题详情:还有就是我还想要一些常用的宽度修饰之类的输入或者输出格式:回答: ...

  10. C语言中的Sleep函数的解读

    Sleep函数: 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include <windows.h& ...

最新文章

  1. GAN生成的结果多样性不足怎么办?那就再添一个鉴别器!
  2. 裁员屠刀下一个目标会是谁?
  3. 如何用python最快的获取大文件的最后几行
  4. opencv+yolov3实现目标检测
  5. 【跟着我们学Golang】Go语言全平台安装
  6. linux中文本查找命令,Linux常用的文本查找命令 find
  7. android EditText光标位置,光标样式,EditText限制输入内容,软键盘遮挡的EditText,搜索框,限制输入表情
  8. RsyncServer服务无法启动的解决方法
  9. (78)FPGA时钟激励(forever)
  10. 计算机桌面图标有小纸张,电脑桌面图标上都有个小图标,为什么
  11. 转:10+年程序员总结的20+条经验教训
  12. 搜狗拼音输入法2015 v7.5 官方版​
  13. 自学IT和接受IT培训两者的优缺点分析
  14. 2022-2027年中国香薰蜡烛行业市场调研及未来发展趋势预测报告
  15. 2022年第十四届华中杯数学建模A题解题思路附代码
  16. 2020考研初试经验贴
  17. python专科就业前景_Python就业前景怎么样?
  18. 1023 穷游?“穷”游?
  19. 微信接口开发申请服务器,开发微信服务器接口的实例教程
  20. plc转单片机,永久使用

热门文章

  1. 2018年我国人均国民总收入达到9732美元,国民经济持续快速增长
  2. java excel转pdf linux_docker安装libreoffice并实现把Excel转为pdf
  3. 鹰式价差matlab,鹰式期权:什么叫铁鹰式期权组合,蝶式价差期权?
  4. 电梯轿厢内电动车自行车人数据集,VOC标签格式已标注
  5. arcgis 10 扩展模块授权无效的解决方法
  6. 陈坤发微博调侃 回应儿子生母话题
  7. DY-SV17F运用集—语音IC
  8. CDR插件开发之Addon插件001 - 从零开始安装VS2022详细步骤
  9. Emoji表情的的文字编码问题
  10. 苹果笔记本电脑我的计算机在哪里设置密码,苹果笔记本忘记密码怎么办