请教一个阵列排序的问题
是不是分少啦。我第一次发贴还不是很懂5*5的矩阵。四个角分别放最小的元素(顺序为从左到右,从上到下依次从小到大放)。中间放最大的值。
原来的
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
变化后应该是
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14。
#include<stdio.h>
void main()
{
void change(int *);
int a[5][5]={35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11},*p,i,j;
printf("original array:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
p=&a[0][0];
change(p);
printf("Now array:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
void change(int *p)
{
int *pmax,*pmin;
int t,i,j;
pmax=p;
pmin=p;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(*pmax<*(p+5*i+j))pmax=p+5*i+j;
if(*pmin>*(p+5*i+j))pmin=p+5*i+j;
}
t=*pmax;
*pmax=*(p+12);
*(p+12)=t;
t=*pmin;
*pmin=*p;
*p=t;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
}
t=*pmin;
*pmin=*(p+4);
*(p+4)=t;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
}
t=*pmin;
*pmin=*(p+20);
*(p+20)=t;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+i*5+j)!=(p+20))&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
}
t=*pmin;
*pmin=*(p+24);
*(p+24)=t;
}
怎么看都看不出问题所在啊。请教高手啊
[ 本帖最后由 douglas 于 2010-7-30 11:06 编辑 ]