题目:将一个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 ;
}