杨氏矩阵问题的解析

     杨氏矩阵是将数字按由上到下由左到右按顺序排列的方式,通过杨氏矩阵来寻找数字可以利用他的特点进行快速有效的查找。

杨氏矩阵      1  2  3

                    4  5  6

                    7  8  9

例如   在其中寻找7,为了使xun'寻找更有效,可以利用矩阵中每一行的zui'最大值在每行的最右边,每一列的最小值在每一列的最上面,利用这个特点,进行排除查找,减少查找的时间,是查找效率更高。​​​​​​

在下面这个函数中,正是利用了这个特点,先定义一个二维数组,然后将x和y的地址传到所调用的函数中去,再将所要寻找的数放进所定义的函数中去,然后使寻找从右上角开始,如果右上角的值比所要寻找的数小,则说明这一行没有这个数,然后跳到下一行,如果大于这个值,则说明在不这一列,列数减一,跳到下一列,以此类推,最终找到数

#include<stdio.h>
int fun(int arr[3][3],int *px, int *py,int k)
{
	int x = 0;
	int y = *py-1;
	while (y>= 0 && x < *px)
	{
		if (arr[x][y] < k)
			x++;
		else if (arr[x][y]>k)
			y--;
		else
		{
			*px = x;
			* py= y;
			return 1;
		}
	}
	return 0;
}
int main()
{
	int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int x = 3;
	int y = 3;
	int k = 1;
	int rat = fun(arr,&x, &y,k);
	if (rat == 1)
		printf("找到了");
	else
	printf("没找到");
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值