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

⌚Time: 2021-11-16 22:44:31

👨‍💻Author: Jack Ge

题目:

将一个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;

}

结果:

由输出结果可以看到二维数组实现了逆序排列