题目:
程序如下:
#include<stdio.h>
#include <stdlib.h>
int search(int (*a)[5],int x,int y);
int main()
{
int i,j;
int b[5][5];
int a[5][5]={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};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
b[i][j]=search(&a[0],i,j);
//b[i][j]=search(a,i,j);}}
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d\t",b[i][j]);
}
printf("\n");
}
}
int search(int (*a)[5],int x,int y)
{
int i,j,k,temp1;
int t;
int c[9];
k=0;
t=1;
for(i=x-1;i<x+2;i++)
{
for(j=y-1;j<y+2;j++)
{
if(i>=0&&j>=0&&i<5&&j<5&&!(i==x&&j==y))
{
//c[k]=*(a+i*5+j);
c[k]=a[i][j];
k++;
}
}
}
while(t)
{
t=0;
for(i=k-1;i>=0;i--)
{
for(j=0;j<i;j++)
{
if(c[j]>c[j+1])
{
temp1=c[j+1];
c[j+1]=c[j];
c[j]=temp1;
t=1;
}
}
}
}
return c[k/2];
}
运行结果如下:
在编程的调试的过程中,发现了两个问题。
(1)对二维数组进行函数传值时的类型不明确的问题。
(2)对基本排序算法产生了混淆。
针对两个问题的探讨。
请参考两篇帖子:
(1)数组做实参和虚参的秘密
http://blog.csdn.net/chenhuijie666/article/details/7582995
(2)基本排序算法分析-----C语言版