【C语言 采集数据 精简排序】

发布于:2025-02-11 ⋅ 阅读:(108) ⋅ 点赞:(0)

这里写自定义目录标题

‌qsort函数

‌qsort函数是C语言标准库中的一个排序函数,定义在头文件stdlib.h中。‌ qsort函数可以对任意类型的数组进行排序,其通用性和灵活性使其成为C语言中常用的排序工具。

新的改变

/**
***********************************************************
* @brief 算术平均滤波
* @param arr,数组首地址
* @param len,元素个数
* @return 平均运算结果
***********************************************************
*/
static uint16_t ArithAvgFltr(uint16_t *arr, uint32_t len)
{
	uint32_t sum = 0;
	for (uint32_t i = 0; i < len; i++)
	{
		sum += arr[i];
	}
	return (uint16_t)(sum / len);
}

/**
***********************************************************
* @brief qsort函数调用的回调函数,比较规则,降序排列
* @param *_a,对应数组元素
* @param *_b,对应数组元素
* @return 比较结果
***********************************************************
*/
static int32_t CmpCb(const void *_a, const void *_b)
{
	uint16_t *a = (uint16_t *)_a;
	uint16_t *b = (uint16_t *)_b;
	int32_t val = 0;
	 if (*a > *b)
	 {
		val = -1;
	 }
	 else if (*a < *b)
	 {
		val =  1;
	 }
	 else
	 {
		val = 0;
	 }
	 return val;
}

/**
***********************************************************
* @brief 中位值平均滤波
* @param arr,数组首地址
* @param len,元素个数,需要大于等于3个
* @return 平均运算结果
***********************************************************
*/
static uint16_t MedianAvgFltr(uint16_t *arr, uint32_t len)
{
	qsort(arr, len, sizeof(uint16_t), CmpCb);
	return ArithAvgFltr(&arr[1], len - 2);
}

static void PushDataToBuf(uint16_t adcVal)
{
	static uint16_t s_index = 0;
	g_adcVal[s_index] = adcVal; 
	s_index++;
	s_index %= MAX_BUF_SIZE;
}

网站公告

今日签到

点亮在社区的每一天
去签到