网站建设资讯

NEWS

网站建设资讯

深入解析C语言自带的比较函数与排序函数——fmax、qsort-创新互联

目录

创新互联公司始终坚持【策划先行,效果至上】的经营理念,通过多达十余年累计超上千家客户的网站建设总结了一套系统有效的全网整合营销推广解决方案,现已广泛运用于各行各业的客户,其中包括:成都公路钻孔机等企业,备受客户赞誉。

一、 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) ? (x) : (y)
int main()
{
	printf("max (100.0, 1.0) = %f\n", max(100.0, 1.0));
	printf("max (-100.0, 1.0) = %f\n", max(-100.0, 1.0));
	printf("max (-100.0, -1.0) = %f\n", max(-100.0, -1.0));
	return 0;
}

运行结果与使用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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:深入解析C语言自带的比较函数与排序函数——fmax、qsort-创新互联
分享链接:http://njwzjz.com/article/eejdj.html