前言:

作者简介:爱吃大白菜1132

人生格言:纸上得来终觉浅,绝知此事要躬行

 

如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!

 

如果觉得博主文章还不错的话,希望三连支持!

目录

1、qsort概念介绍

2、qsort()函数实现(循序渐进式讲解)

2.1 qsort()函数

2.2 qsort()函数实现过程

3、小节


1、qsort概念介绍

qsort()函数(quick sort)是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。

2、qsort()函数实现(循序渐进式讲解)

2.1 qsort()函数

qsort()函数函数函数参数:

void qsort
(void* base //待排序数据的起始地址size_t num, //待排序数据的元素个数size_t size,//待排序数据中一个元素的大小(单位:字节)int (*compar)(const void*,const void*)//比较两个元素大小的函数指针
);

函数中第一个函数参数(void)的类型非常奇妙,因为待排序数据的元素类型可能是整形、浮点型、字符型、结构体……而void类型就像一个宰相(宰相肚子能撑船)不管你传过来的地址是何类型,我都可以积极的收纳。

函数中第四个函数参数是最难理解的。对于整形数据我们可以通过大小号来比较,对于字符型数据可以用strcmp来比较,但是,我们遇到结构体就出现了问题,结构体中包含的类型多,我们就需要因材施教。

 int (*compar)(const void*p1,const void*p2)//比较两个元素大小的函数指针
);
返回值 含义
return -1 p1<p2
return 0 p1=p2
return 1 p1>p2

2.2 qsort()函数实现过程

观察冒牌排序:

可得出如下过程:

整形:

//测试qsort()函数功能
int cmp_int(const void* e1, const void* e2)
{return  *(int*)e1 - *(int*)e2;
}
void test()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };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]);//打印排列好的数组}
}int main()
{test();return 0;
}

结构体:

struct Stu
{char name[20] = {0};int age = 0;
};
int cmp_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test()
{struct Stu s[] = { {"zhangsan",10},{"lishi",20}};qsort(s, sizeof(s), sizeof(s->name),cmp_by_name);printf("%s ", s->name);
}int main()
{test();return 0;
}

3、小节

有了qsort()函数能有节省不少时间,后期我会出一起通讯录再详细的介绍qsort()函数的使用。

【C语言】qsort()函数详解相关推荐

  1. C语言-qsort函数详解及使用例

    q s o r t ( ) qsort() qsort() 函数是C语言 srdlib.h 库中的排序函数.此函数使用快速排序算法,时间复杂度一般在 O ( l g ( n ) ) O(lg(n)) ...

  2. C语言-qsort函数详解

    目录 一.qsort函数是什么 二.使用qsort排序-以升序为例 关于void*型指针: 1.整形数组排序 2.字符数组排序 3.字符指针数组排序 4.结构体数组排序 5.浮点型数组排序 三.使用冒 ...

  3. C语言 qsort()函数详解 (笔记)

    qsort函数,其声明在stdlib.h文件中,时间复杂度为n*log(n). 功能:使用快速排序例程进行排序 用法: void qsort(void *base, size_t nitems, si ...

  4. C语言 - qsort函数详解

    文章目录 一.qsort函数简介 1.qsort函数是C标准库<stdlib.h>库中的函数,使用时引入#include <stdlib.h>.** 2.它的函数原型是 voi ...

  5. C语言qsort函数详解

    目录 一.qsort函数的使用 二.qsort函数的模拟 一.qsort函数的使用 快排函数qsort是C的库函数,它可以对输入的任何类型的数组排序,通过该函数的函数声明我们可以看出它的使用方法: 举 ...

  6. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  7. 冒泡排序和qsort函数详解以及如何模拟实现qsort函数

    一.冒泡排序 冒泡排序是一种常见的排序方式,它可以把数组元素有序或无序的数组进行重新排序,并使得数组中的元素从大到小或从小到大进行排序(就像泡泡一样). 冒泡排序原理: 每次比较数组中的相邻的两个元素 ...

  8. qsort函数详解以及模拟实现

    qsort函数详解以及模拟实现 一.qsort函数是什么 二.具体的使用 1.参数4(参数3在模拟实现时解释) 2.例子 1.排序整形 2.排序结构体 三.模拟实现qsort 1.参数3 2.模拟排序 ...

  9. c语言memset对应java,C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...

  10. R语言which函数详解以及Rcpp改写

    R语言which函数详解以及Rcpp的改写 引言 which 函数的介绍 which函数的一些小例子 1 2 which函数的改进以及时间对比 引言 首先来介绍一下R语言which函数的作用:whic ...

最新文章

  1. 《研磨设计模式》chap18 状态模式state(4)例子
  2. Linq 对List的一些操作
  3. WebKit 内核源码分析 (四)
  4. 算法—快速排序Sqrt (C语言)
  5. 2029. 石子游戏 IX
  6. 2021年德国汽车产量预计同比锐减18%
  7. centen os7安装maven
  8. iOS底层探索之KVO(五)—FBKVOController分析
  9. 【问题5】什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?
  10. 【干货分享】大话团队的GIT分支策略进化史
  11. 17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试
  12. 2020年中华人民共和国行政区划代码
  13. 计算机弹奏简谱成都,赵雷《成都》简谱,分享给大家
  14. html 置换元素和非置换元素
  15. 网络互联及Internet
  16. 同城小程序需要的服务器配置,微同城小程序-设置教程-一站云
  17. 三星拿出了四摄手机,可惜诚意不足,挑战国产手机成奢望
  18. weblogic子服务器显示状态RESUMING,长期等待状态
  19. ISA, x86,x86_64, AMD64, 指令集等名词解析
  20. 自己动手写 H.264 解码器---AnnexB 和 avcC

热门文章

  1. 张博涵清华大学_特别专访 | 张博涵 上
  2. javaSE学习笔记_目录
  3. 【算法】最短路径之Bellman-Ford
  4. 删除Karabiner-Elements 和 Karabiner-EventViewer提示项目被锁定
  5. iphonex 序列号_iPhoneX序列号在哪 苹果X序列号怎么看?
  6. Endnote导入下载好的引用文件
  7. 提高机器学习模型性能的五个关键方法
  8. 表情设计都有哪些技巧,分享做好表情设计的几个细节
  9. 【Windows系统笔记】打造一个适合自己的windows系统
  10. MATLAB符号变量的创建和简单运算