写一个函数实现:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放)之解法改写

#include<stdio.h>

void change(int *p){

int i,j,temp;

int *pmax,*pmin;

// 初始化最大值和最小值的指针

pmax=p;

pmin=p;

// 遍历矩阵,寻找最大和最小值

for(i=0;i<5;i++)

for(j=i;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;

}

// 交换最大值和特定位置的元素

temp=*(p+12);

*(p+12)=*pmax;

*pmax=temp;

// 交换最小值和起始位置的元素

temp=*p;

*p=*pmin;

*pmin=temp;

pmin=p+1;

// 第二次遍历,寻找次小值并放置到特定位置

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{

if(i==0&&j==0)continue; // 跳过起始位置

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

}

// 交换次小值和特定位置的元素

temp=*pmin;

*pmin=*(p+4);

*(p+4)=temp;

pmin=p+1;

// 第三次遍历,进一步确定并交换次小值的位置

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{

if((i==0&&j==0)||(i==0&&j==4))continue; // 跳过起始位置和特定位置

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

}

// 交换确定的次小值和特定位置的元素

temp=*pmin;

*pmin=*(p+20);

*(p+20)=temp;

pmin=p+1;

// 第四次遍历,最后确定并交换次小值的位置

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{

if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0))continue; // 跳过已确定的位置

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

}

// 交换确定的次小值和最后一个特定位置的元素

temp=*pmin;

*pmin=*(p+24);

*(p+24)=temp;

}

/**

* 主函数,用于输入矩阵数据并调用change函数进行排序,最后输出排序后的矩阵。

*/

int main(){

int a[5][5],*p,i,j;

printf("请输入矩形:");

// 输入矩阵元素

for(i=0;i<5;i++)

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

p=&a[0][0]; // 获取矩阵的首地址

change(p); // 调用排序函数

printf("排序后:");

// 输出排序后的矩阵

for(i=0;i<5;i++){

for(j=0;j<5;j++)

printf("%d ",a[i][j]);

printf("\n");

}

return 0;

}

相关推荐
晚风吹长发8 分钟前
初步了解Linux中的信号捕捉
linux·运维·服务器·c++·算法·进程·x信号
机器学习之心11 分钟前
MATLAB基于GA-ELM与NSGA-Ⅱ算法的42CrMo表面激光熔覆参数多目标优化
算法·matlab·ga-elm
TracyCoder12311 分钟前
LeetCode Hot100(17/100)——240. 搜索二维矩阵 II
算法·leetcode
FJW02081411 分钟前
haproxy的调度算法
算法
小程同学>o<12 分钟前
嵌入式之C/C++(二)内存
c语言·开发语言·c++·笔记·嵌入式软件·面试题库
浅念-12 分钟前
C语言——内存函数
c语言·经验分享·笔记·学习·算法
MicroTech202518 分钟前
微算法科技(NASDAQ:MLGO)基于后量子阈值算法的区块链隐私保护技术
科技·算法·区块链
qq_4171292525 分钟前
基于C++的区块链实现
开发语言·c++·算法
爱吃番茄鼠骗26 分钟前
指针函数的应用层与驱动层:解耦核心与实践
数据结构
2401_8324027527 分钟前
C++中的命令模式实战
开发语言·c++·算法