#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;
}