c语言——二维数组,指针,函数

例题详解:

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阶时数据混乱.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值