对一维顺序数组进行螺旋输出(不是顺序的话就先进行排序),如
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
主要思想:对用拥有X*Y个元素的数组分为Y行输出,每行X个数。
将螺旋输出的结果看做一个坐标系,将输出看做很多个不同大小的“口”,注意到一个规律:
输出“口”的上部分时,Y坐标不变,X坐标递增;输出右部分时,X坐标不变,Y坐标递增;以此类推...
可见输出一个“口”便是一个循环,那么就可以用这个循环来输出整个数组。
方法:定义四个变量记录“口”形的大小,xmax=X-1,ymax=Y-1,xmin=0,ymin=0,他们分别表示每个“口”的
最大x、y值和最小x、y值。
现在,控制了“口”行的大小以及位置,接下来不停的将原一维数组输出到一个二维数组就可以了。再将
二维数组顺序列出就得到最终的螺旋输出了。
如果是将这样一个二维数组输出到一维数组的话,根据这种思路,就变得更简单了。只需将
a[j][i++] = b[q++]; 改为 b[q++]= a[j][i++]; ,
void Output(int (*a)[X],int b[]) 改为void Output(int (*a)[X],int *b)
即可。
感觉这个方法比较笨拙,不知道有没有公式能直接计算出元素的位置,这样效率也许会快一点