一个关于二维数组的算法问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 14:34:23
5 85 4 2 68
78 82 75 41 14
79 47 38 1 47
1 2 14 65 13
96 87 32 14 21
按下列步骤编码:(使用C语言)
1.分配两个5x5数组a和b,将数组a按上图所示赋初值。
2.对于数组a中每一个元素a[i][j],从它的相邻元素中选取中间值填入b[i][j]。
3.打印b数组。

例如:
a[0][2]的相邻元素为85、82、75、41、2,升序排序后序列为2、41、75、82、85,
取中间值方法:
中间值索引 = 相邻元素个数 / 2
即5 / 2 = 2,中间值为75,将6填入b[0][2]位置。

a[2][1] 的相邻元素为78、82、75、79、38、1、2、14,排序后序列为1、2、14、38、75、78、79、82,中间值为75,填入b[2][1]。
我想了很久,还没有想出比较好的方法,希望各位高手指教

因为相邻元素最多只有8个,可以设一个长度为8偏移坐标数组,内容是
int pos[8][2]={
-1,-1,
-1,0,
-1,1,
0,-1,
0,1
1,-1,
1,0,
1,1
};
之后对a中元素二重循环,对每个元素a[i][j],执行一个子循环
for(k=0;k<8;k++)
if(i+pos[k][0]<0 || i+pos[k][0]>4 || j+pos[k][1]<0 || j+pos[k][1]>4)
continue;
else
将a[i+pos[k][0]][j+pos[k][1]]放入用于存放a[i][j]的相邻元素的一个辅助数组

有点中值滤波的意味