【C语言 采集数据 精简排序】
这里写自定义目录标题
- qsort函数
- 新的改变
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;
}