目录

一、fmax函数

1. 解析fmax函数

2. 运用fmax函数

•小总结:

二、fdim函数

1. 解析fdim函数

2. 运用fdim函数

三、qsort函数

1. 解析qsort函数

2. 运用qsort函数

3. 深入挖掘qsort

4.qsort实战

Summery


一、fmax函数

1. 解析fmax函数

fmax是C语言(C99)自带的一个函数,用于比较两数大小,返回较大值
在cplusplus网站上搜索fmax函数,了解更多信息https://cplusplus.com/

famx返回值为双精度浮点型,同时可用fmaxf,fmaxl

2. 运用fmax函数

• 包含头文件:include

#include#includeint main(){printf("fmax (100.0, 1.0) = %f\n", fmax(100.0, 1.0));printf("fmax (-100.0, 1.0) = %f\n", fmax(-100.0, 1.0));printf("fmax (-100.0, -1.0) = %f\n", fmax(-100.0, -1.0));return 0;}

运行结果:

同样可以宏定义一个max达到与fmax函数同样的效果:

#include#define max(x,y) (x) > (y) " />

运行结果与使用fmax函数的结果是一样的;

•小总结:

在之前的文章中解决实际题目时我也是主要运用宏定义的方法,写这些东西主要是想表达fmax使用起来比宏定义一个max要方便很多,至少在敲代码上简便

fmin函数与fmax用法是完全相同的,只是返回值是较小值,大家可自行尝试

二、fdim函数

1. 解析fdim函数

使用fdim函数判断传入的第一个参数(x)是否大于第二个参数(y)

如果x > y 则返回两者的差值( x - y )

如果 x < y 则返回 0

2. 运用fdim函数

• 包含头文件:include

#include #include  int main (){printf ("fdim (2.0, 1.0) = %f\n", fdim(2.0,1.0));printf ("fdim (1.0, 2.0) = %f\n", fdim(1.0,2.0));printf ("fdim (-2.0, -1.0) = %f\n", fdim(-2.0,-1.0));printf ("fdim (-1.0, -2.0) = %f\n", fdim(-1.0,-2.0));return 0;}

运行结果:

三、qsort函数

1. 解析qsort函数

调用qsort函数需要传入四个参数

① 待排序的数组首地址

② 数组元素的个数

③单个元素的大小(字节)

④ 实现一个比较函数(cmpare)

2. 运用qsort函数

• 包含头文件:include

四个当中最重要的就是实现最后一个比较函数了,这也使我们唯一需要手动实现的东西:

这里给出一个简单的例子带大家初步熟悉⬇️

#include#include//比较函数int cmp_int(int* e1,int* e2) //数组元素为整型,所以用整型指针接收{return *e1 - *e2;//具体原理看后图}int main(){int arr[] = { 9,8,7,6,5,4,3,2,1 };int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数qsort(arr, size,sizeof(arr[0]), cmp_int);//sizeof(arr[0])表示一个元素的大小:4bite//打印数组for (int i = 0; i < size; i++){printf("%d ",arr[i]);}return 0;}

3. 深入挖掘qsort

相信大家经过上面这个例子之后能够大概运用了,但是可能有同学会提问,为什么比较函数返回两者相减呢?

翻阅qsort函数原理,对于返回大于零的数字时(e1>e2) ,将较大值覆盖到较小值,最终实现排序的目的;

qsort 函数实现了一种快速排序算法,用于对 num 元素数组进行排序,每个元素的宽度字节。参数基是指向要排序的数组基的指针。qsort 用排序的元素覆盖此数组。参数 compare 是指向用户提供的例程的指针,该例程比较两个数组元素并返回指定其关系的值。qsort 在排序过程中调用 COMPARE 例程一次或多次,每次调用时将指针传递给两个数组元素

如果想要得到倒序,直接将比较函数里两者相减的位置交换即可⬇️

4.qsort实战

剑指 Offer 39.数组中出现次数超过一半的数字

leetcode传送➡️https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/?favorite=xb9nqhhg

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2

完整代码:

int cmp(int* x, int* y){return *x - *y;}int majorityElement(int* nums, int numsSize) {qsort(nums, numsSize, sizeof(int), cmp);return nums[numsSize / 2];}

用排序知识这道题的一种做法,这道题有O(n)的做法,这里就不再赘述了,之后有时间我会专门出一期剑指offer的文章


Summery

上述这些函数都极大的减轻了我们的代码量,尤其时qsort函数,当我们在刷题时遇到需要我们进行排序之后再做的题,这时我们使用C语言内置的函数就方便很多了

当然,如果你想要知道更多排序算法,欢迎阅读我之前所写的

排序算法(一)https://blog.csdn.net/Dusong_/article/details/127749130?spm=1001.2014.3001.5502
排序算法(二)https://blog.csdn.net/Dusong_/article/details/127385058?spm=1001.2014.3001.5502更多C++函数

C++用于算法题中简化代码的冷门函数与类模板集合https://blog.csdn.net/Dusong_/article/details/132536168?spm=1001.2014.3001.5502