c语言二维数组实现逆序排列算法

题目:
将一个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;
}

结果:
在这里插入图片描述
由输出结果可以看到二维数组实现了逆序排列

猜你喜欢

转载自blog.csdn.net/m0_60352504/article/details/121366983
今日推荐