例题详解:
1.将nxn方阵中的前4个最小元素放置到方阵的四个角。
注解:顺序为:左上、右上、左下、右下;元素集合不变,四角之外的其余元素位置变动不作限制。
输入样例:
3
4 2 3 1 5 7 6 8 9
输出样例:
1 6 2
9 5 7
3 8 4
算法概要:
二维数组的排序方法
利用其在存储空间的连续性,看作一维数组进行排序,具体利用指针(详情请看代码)。
#include<stdio.h>
int f(int *p,int n);
void swap(int *x,int *y);
int main() {
int n,i,j;
scanf("%d",&n);
int a[n][n];
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
scanf("%d",&a[i][j]);
}
}
f(&a[0][0],n);
}
int f(int *p,int n) {
int i,j;
for(i=0; i<n*n-1; i++) {
for(j=0; j<n*n-1-i; j++) {
if(*(p+j)>*(p+j+1)) swap(p+j,p+j+1);
}
}
swap(p+n*n-1,p+3);
swap(p+n*n-n,p+2);
swap(p+n-1,p+1);
for(i=0; i<n*n; i++) {
printf("%d ",*(p+i));
if((i+1)%n==0)printf("\n");
}
}
void swap(int *x,int *y) {
int t;
t=*x;
*x=*y;
*y=t;
}
要点强调:
交换四角元素时从右下(顺时针)开始避免3,4阶时数据混乱.