#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; // 更新最小值的指针
}
// 交换最大值和第12个元素的位置
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(((p+5*i+j)!=p)&&(*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(((p+5*i+j)!=(p+4)&&(p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
pmin=p+5*i+j;
// 交换新的最小值和第20个元素的位置
temp=*pmin;
*pmin=*(p+20);
*(p+20)=temp;
// 重新设置最小值指针
pmin=p+1;
// 在剩余元素中寻找最后的最小值并交换
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=(p+20)&&(p+5*i+j)!=(p+4)&&(p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
pmin=p+5*i+j;
// 交换最后的最小值和第24个元素的位置
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函数进行排序
change(p);
printf("排序后:");
// 输出排序后的矩阵
for(i=0;i<5;i++){
for(j=0;j<5;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}