杨氏矩阵中查找一个元素是否存在

杨氏矩阵中查找一个元素是否存在,第1张

杨氏矩阵查找一个元素是否存在 何为杨氏矩阵

简单来说,就是一个矩阵,其特点是从左到右以及从上到下数据总是递增的。如图所示

查找元素是否在其中

既然我们知道了杨氏矩阵的特点,那么我们可以发现,右上角的元素往左是递减的,往下是递增的。左下角的元素往上是递减的,而往上是递减的。

也就是说如果是右上角的元素,它左边的元素一定比它小,而它下边的元素一定比它大。

而左下角的元素,它上面的元素一定比它小,它右边得元素一定比它多。

那么我们以有上角元素为例: 如图所示

 

假如我们将这个元素作为标杆,那么如果要查找的元素比它小,那么一定在它的左边;如果比它大,那么一定在它下面。因为不论这两边那边查到终点,要不是这个矩阵中最小的数,要不就是这个矩阵中最大的数,所以如果查到底了,还是找不到,说明这个数不在这个矩阵中。

而且需要注意的是,如果要查找的数比标杆数小,那么如果这个数在,那么一定在标杆数的左边,即只需要查找标杆数左边的的元素即可;如查找的数大,同样的道理。

好的,代码如下,这里我们将杨氏矩阵直接给了出来,方便理解。

#include
int yang_table(int (*arr)[6],int x,int y,int a)
{
	int i = 0;
	int flag = 0;
	while (i < x && y >= 0)
	{
		if (arr[i][y - 1] == a)
		{
			flag = 1;
			break;
		}
		else
		{
			if (arr[i][y - 1] > a)
				y--;
			else
				i++;
		}
	}
	return flag;
}
int main()
{
	int arr[5][6] = { {1,2,3,4,5,6} ,{2,3,4,5,6,7} ,{3,4,5,6,7,8},{4,5,6,7,8,9},{5,6,7,8,9,10}};
	printf("请输入要查询的数:");
	int a = 0;
	scanf("%d", &a);
	int re=yang_table(arr,5,6,a);
	if (1 == re)
		printf("Findn");
	else
		printf("Not Findn");
	return 0;
}

 首先对于这段代码,可能需要注意的首先是,flag的作用。

flag,在这里作为一个标杆,在查找开始之前,将其设置为0,当需要查找的数找到之后,将其设置为1,此时flag发生了变化,然后用break语句跳出循环,然后将flag的值返回给主函数,如果发现flag的值发生了变化,说明找到了,反之则没有。

其次就是当标杆数不是要查找的数时,需要向左查还是向下查,这里需要注意如果写反了,是肯定查不出来的,就算要查找的数在这个矩阵中。

左下角的数也可以实现,道理是一模一样的,所以这里我们不过多赘述。 

好了,本文到这儿就结束了,如有错误还请指针,如果觉得不错的话,up主求个三连哦! 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存