如何在不改变数组顺序,又不创建新数组的情况下进行中值滤波呢?
这个问题我在网上找了好久,都又创建了一个一样的数组,然后把数据复制过去,再排序找出中间值。我觉得这个办法是可以实现可是总觉得很麻烦。
那就只能自己想自己写了。
void middistance(float* distance)
{
unsigned char count = 0, MarkNum, CompareNum, equal = 0,
float midval = 0;
for (MarkNum = 0; MarkNum < MAX_LDFEOFFSET; MarkNum++) {
midval = distance[MarkNum];
for (CompareNum = 0; CompareNum < MAX_LDFEOFFSET; CompareNum++) {
if (MarkNum == CompareNum) {
continue;
}
/*相等情况*/
if (midval == distance[CompareNum]) {
equal++;
if (equal == MAX_LDFEOFFSET / 2) {
distance[MAX_LDFEOFFSET] = midval ;
return;
}
}
/*大于情况*/
if (midval > distance[CompareNum]) {
count ++;
}
}
/* 判断大于和等于个数 */
if ((count <= MAX_LDFEOFFSET / 2) && ((count + equal) >= MAX_LDFEOFFSET / 2)) {
dist