目录

一、qsort函数的介绍

1、整形数组

2、字符数组

3、字符串

4、结构体

二、qsort函数的使用


一、qsort函数的介绍

qsort函数是一种底层快速排序的函数,它的特点就是可以排序任意类型的数据,比如:整形、字符串、浮点型、以及结构体类型。

具体用法如下:

1、void* base:表示待排序数组的起始地址;

2、size_t  num:表示数组元素的个数;

3、size_t  size:表示一个数组元素的大小(单位字节);

4、int  (*compar)(const void*, const void*):表示比较两个元素大小的函数指针,指向的函数是排序函数,所包含的两个参数为比较元素的地址,最后参数的类型为void*,这样可以接收任意形式的参数。

1、整形数组

int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}

上述函数是自定义的比较函数,函数的返回类型为 int 类型,如果<0时,e1小于e2,如果>0时,e1大于e2,如果=0时,e1=e2。对两个元素指针进行强制类型转化为整型指针,再进行解引用得到比较元素的值,最后将两个元素的差值返回。

2、字符数组

int cmp_char(const void* e1, const void* e2)
{return *(char*)e1 - *(char*)e2;
}

3、字符串

(1)按字符串首字母进行排序

int cmp_string(const void* e1, const void* e2)
{return *(char*)e1 - *(char*)e2;
}

(2)按字符串长度进行排序

int cmp_string(const void* e1, const void* e2)
{return strlen((char*)e1) > strlen((char*)e2) ? 1 : -1;
}

4、结构体

假如结构体如下:

struct Stu
{char name[20];//姓名int age;//年龄
}s;

(1)按名字排序

int cmp_stu_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}

(2)如果名字相同,就按年龄排序

int cmp_stu_by_age(const void* e1, const void* e2)
{if ((strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name)) != 0)return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);elsereturn ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}

二、qsort函数的使用

1、对整形数组元素的排序使用

int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}
int main()
{int arr[10] = { 5,7,9,3,1,6,2,4,0,8 };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_int);for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}

运行结果:

2、 对结构体比较的使用

struct Stu
{char name[20];int age;
};
int cmp_stu_by_name(const void* e1, const void* e2)
{if ((strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name)) != 0)return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);elsereturn ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
int main()
{struct Stu s[] = { { "zhangsan", 20 }, { "wangwu", 18 }, { "zhaohu", 50 }, { "lisi", 44 }, { "mahan", 33 }, {"zhaohu",67} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);for (int i = 0; i < sz; i++){printf("%s %d\n", s[i].name, s[i].age);}return 0;
}

运行如下:


本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

老铁们,记着点赞加关注哦!!!

【C语言】重要函数qsort函数的用法相关推荐

  1. c语言qsort函数简介,C语言排序函数—qsort函数

    前言: 在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实C语言函数库中就有一个排序函数--qsort函数,使用它可以节省你单独写排 ...

  2. C语言函数——qsort函数的使用

    目录 一.qsort函数: 1.定义: 2.参数: (1).基础 (2).数字 (3).大小 (4).比较 二.总代码: 1.整型比较: 2.浮点型比较: 3.字符串比较: 4.结构体比较: 一.qs ...

  3. C语言sort和qsort函数的用法

          做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错.STL里面有个sort函数,可以直接对 ...

  4. C语言qsort函数对二维数组排序的不同情况

    内置排序函数--qsort函数 函数说明: 下面博主讲的很清楚,不多介绍. C语言:qsort()解析 对二维数组: 上文博主提到了对二维数组排序时compare函数的写法,但在具体实践中,我们会发现 ...

  5. C语言快速排序--qsort函数

    C语言快速排序–qsort函数 一.什么是qsort函数 qsort函数是C语言编译器函数库自带的快速排序函数. 其包含在#include<stdlib.h>头文件里面,所以在使用的时候需 ...

  6. C语言中快排函数——qsort()

    qsort()函数 qsort()函数是C库提供的快排函数接口 #indlude <stdlib.h> void qsort(void *base, size_t nmemb, size_ ...

  7. C语言 数组排序 qsort函数及自定义函数

    qsort函数 ① qsort函数是stdlib.h中的函数,使用前需要声明: #include<stdlib.h> ② 使用格式: int cmp(const void * a,cons ...

  8. qsort函数的理解和使用

    目录 qsort函数 cmp函数的自定义 主函数 排序int类型代码 排序结构体 排序结构体的总代码(供读者测试) qsort函数 qsort函数是<stdlib.h>库函数中的,基于快速 ...

  9. C语言之——快速排序qsort库函数的讲解

    qsort函数C语言编译器函数库自带的排序函数,也叫快速排序函数.之前我写过一篇关于冒泡排序的代码讲解,大家感兴趣的话可以先看一看我对于冒泡排序的讲解. 相比较于冒泡排序,快速排序可以用更加快捷的速度 ...

最新文章

  1. 端到端问答新突破:百度提出RocketQA,登顶MSMARCO榜首
  2. oracle RAC信息,Oracle 查看 RAC GI 版本信息
  3. Oracle系统用户的默认密码及功能
  4. matlab示波器显示部分,Matlab 示波器显示设置
  5. [云炬创业基础笔记]第七章创业资源测试7
  6. 蓝桥杯练习(java):字符串对比
  7. C语言 浅谈可变参数
  8. python执行效果_使用tqdm显示Python代码执行进度功能
  9. Python基础之补充1
  10. Python随机梯度下降法(一)
  11. ❤️一分钟学会MySQL数据库的使用❤️
  12. linux下sqlite3的使用
  13. VB 串口编程 开发心得
  14. MATLAB常用求导和求偏导函数
  15. Android获取半透明属性
  16. 记学习量化投资 企业估值
  17. ZStack-2.6.2-c74 搭建私有云
  18. 非接触物体尺寸形态测量(G题)
  19. 高中会考计算机都考啥,高中会考都有哪些科目
  20. 如何实现一个漂亮的微信小程序朋友圈、表白墙、校内圈(小程序篇,附源码)

热门文章

  1. 游戏设计艺术学习笔记之——你好
  2. 多项式拟合缺点_多项式拟合
  3. 分享深入学习MongoDB pdf版
  4. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...
  5. zepoto.js的使用
  6. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)
  7. DOM算法系列002-寻找指定DOM节点的上一个或下一个节点
  8. CNCF 云原生容器生态系统概要
  9. QT软件开发之入门基础-搭建开发环境
  10. 热浪(单源最短路问题)