题目:
将一个5*5的二维数组实现逆序排列
思路:
一个5*5的二位数组,要对他实现逆序排列,可以考虑将他最后面的数值与最前面的数值依次对换。
即位置1与位置25互换,位置2与位置24互换…
实现:
使用嵌套for循环,依次实现第一行与最后一行数值互换,第二行与倒数第二行数值互换…
for(i=0;i<col/2;i++){
for(j=0;j<5;j++){
temp=array[i][j];
array[i][j]=array[col-i-1][4-j];
array[col-i-1][4-j]=temp;
}
}
当总行数为奇数时,最中间行没有参与对换,额外代码对行数为奇数时的最中间行进行数值互换
if(col%2!=0){
for(i=col/2,j=0;j<5/2;j++){
temp=array[i][j];
array[i][j]=array[i][4-j];
array[i][4-j]=temp;
}
}
源代码:
#include<stdio.h>
void reverse(int array[][5],int col){
int i,j,temp;
for(i=0;i<col/2;i++){
for(j=0;j<5;j++){
temp=array[i][j];
array[i][j]=array[col-i-1][4-j];
array[col-i-1][4-j]=temp;
}
}
if(col%2!=0){
for(i=col/2,j=0;j<5/2;j++){
temp=array[i][j];
array[i][j]=array[i][4-j];
array[i][4-j]=temp;
}
}
}
void printarray(int array[][5],int col){
int i,j;
for(i=0;i<col;i++){
for(j=0;j<5;j++){
printf("%2d ",array[i][j]);
}
printf("\n");
}
}
int main(){
int array[][5]={
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25
};
printf("\nbefore reverse:\n");
printarray(array,5);
reverse(array,5);
printf("\nafter reverse:\n");
printarray(array,5);
return 0;
}
结果:
由输出结果可以看到二维数组实现了逆序排列