【C语言】qsort()函数详解
前言:
作者简介:爱吃大白菜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()函数详解相关推荐
- C语言-qsort函数详解及使用例
q s o r t ( ) qsort() qsort() 函数是C语言 srdlib.h 库中的排序函数.此函数使用快速排序算法,时间复杂度一般在 O ( l g ( n ) ) O(lg(n)) ...
- C语言-qsort函数详解
目录 一.qsort函数是什么 二.使用qsort排序-以升序为例 关于void*型指针: 1.整形数组排序 2.字符数组排序 3.字符指针数组排序 4.结构体数组排序 5.浮点型数组排序 三.使用冒 ...
- C语言 qsort()函数详解 (笔记)
qsort函数,其声明在stdlib.h文件中,时间复杂度为n*log(n). 功能:使用快速排序例程进行排序 用法: void qsort(void *base, size_t nitems, si ...
- C语言 - qsort函数详解
文章目录 一.qsort函数简介 1.qsort函数是C标准库<stdlib.h>库中的函数,使用时引入#include <stdlib.h>.** 2.它的函数原型是 voi ...
- C语言qsort函数详解
目录 一.qsort函数的使用 二.qsort函数的模拟 一.qsort函数的使用 快排函数qsort是C的库函数,它可以对输入的任何类型的数组排序,通过该函数的函数声明我们可以看出它的使用方法: 举 ...
- 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序
[排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...
- 冒泡排序和qsort函数详解以及如何模拟实现qsort函数
一.冒泡排序 冒泡排序是一种常见的排序方式,它可以把数组元素有序或无序的数组进行重新排序,并使得数组中的元素从大到小或从小到大进行排序(就像泡泡一样). 冒泡排序原理: 每次比较数组中的相邻的两个元素 ...
- qsort函数详解以及模拟实现
qsort函数详解以及模拟实现 一.qsort函数是什么 二.具体的使用 1.参数4(参数3在模拟实现时解释) 2.例子 1.排序整形 2.排序结构体 三.模拟实现qsort 1.参数3 2.模拟排序 ...
- c语言memset对应java,C语言memset函数详解
C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...
- R语言which函数详解以及Rcpp改写
R语言which函数详解以及Rcpp的改写 引言 which 函数的介绍 which函数的一些小例子 1 2 which函数的改进以及时间对比 引言 首先来介绍一下R语言which函数的作用:whic ...
最新文章
- 《研磨设计模式》chap18 状态模式state(4)例子
- Linq 对List的一些操作
- WebKit 内核源码分析 (四)
- 算法—快速排序Sqrt (C语言)
- 2029. 石子游戏 IX
- 2021年德国汽车产量预计同比锐减18%
- centen os7安装maven
- iOS底层探索之KVO(五)—FBKVOController分析
- 【问题5】什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?
- 【干货分享】大话团队的GIT分支策略进化史
- 17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试
- 2020年中华人民共和国行政区划代码
- 计算机弹奏简谱成都,赵雷《成都》简谱,分享给大家
- html 置换元素和非置换元素
- 网络互联及Internet
- 同城小程序需要的服务器配置,微同城小程序-设置教程-一站云
- 三星拿出了四摄手机,可惜诚意不足,挑战国产手机成奢望
- weblogic子服务器显示状态RESUMING,长期等待状态
- ISA, x86,x86_64, AMD64, 指令集等名词解析
- 自己动手写 H.264 解码器---AnnexB 和 avcC