C语言:将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素....

题目:将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用

对二维数组进行排序

#include<stdio.h>
void main(){void sort(int *);
int array[5][5] = {{5,4,0,15,65},{6,7,9,14,16},{98,75,66,47,32},{10,53,1,13,19},{120,99,35,39,28}};
int *p = array,i,j;
sort(p);

for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%3d ",array[i][j]);
        }
        printf("\n");
    }
    return 0;
}

void sort(int *p){
    int i,j,temp;
    for(i=0;i<25;i++){
        for(j=0;j<25-i;j++){
            if(*(p+j) > *(p+j+1)){
                temp = *(p+j+1);
                *(p+j+1) = *(p+j);
                *(p+j) = temp;
            }
        }
    }
    return ;
}

代码:

#include<stdio.h>
void sort(int [][]);
int array[5][5] = {{5,4,0,15,65},{6,7,9,14,16},{98,75,66,47,32},{10,53,1,13,19},{120,99,35,39,28}};
sort(array);
return 0;
}

void sort(int array[][5]){
    int i,j,temp;
    int *p = array;
    int newArray[5][5];
    //把传进来的数组复制到新数组中 对传进来的数组进行排序
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            newArray[i][j] = array[i][j];
        }
    }
    //先对二维数组进行排序 找到最小的前四位 和 最大第一位数 的数值
    for(i=0;i<25;i++){
        for(j=0;j<25-i;j++){
            if(*(p+j) > *(p+j+1)){
                temp = *(p+j+1);
                *(p+j+1) = *(p+j);
                *(p+j) = temp;
            }
        }
    }

    //交换 找到数值后 再对数值的位置进行确定
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
        /*这几个if语句就是确定array中最小的前四位和最大的一位数
        在newAray中对应的具体位置 找到对应的数值位置后 进行交换
        可能有点繁琐
        */
            if(newArray[i][j] == array[0][0]){
                temp = newArray[i][j];
                newArray[i][j] = newArray[0][0];
                newArray[0][0] = temp;
            }
            if(newArray[i][j] == array[0][1]){
                temp = newArray[i][j];
                newArray[i][j] = newArray[0][4];
                newArray[0][4] = temp;
            }
            if(newArray[i][j] == array[0][2]){
                temp = newArray[i][j];
                newArray[i][j] = newArray[4][0];
                newArray[4][0] = temp;
            }
            if(newArray[i][j] == array[0][3]){
                temp = newArray[i][j];
                newArray[i][j] = newArray[4][4];
                newArray[4][4] = temp;
            }
            if(newArray[i][j] == array[4][4]){
                temp =newArray[i][j];
                newArray[i][j] = newArray[2][2];
                newArray[2][2] = temp;
            }
        }
    }

    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%3d",newArray[i][j] );
        }
        printf("\n");
    }

    //这里输出了排序好的二维数组
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%3d",array[i][j] );
        }
        printf("\n");
    }

    return ;
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值