杨氏矩阵查找

有这样一种矩阵,其每一行的元素依次递增,每一列的元素也依次递增

举例如:

1,2,3

4,5,6

7,8,9

这样的矩阵称为杨氏矩阵,现在要在矩阵中查找某个元素是否存在,要求返回元素下标该怎么做呢?

最简单的做法,把这个矩阵放到二维数组中,把这个数组遍历一遍,找到该元素就返回下标,否则返回0.观察杨氏矩阵的排列,从中找出规律,我们可以写出更加高效的搜索方法,就以这个数组为例,假设a[3][3]={{1,2,3}

                                                                                               {4,5,6}

                                                                                               {7,8,9}},

我们要查找的元素为5,现在我们锁定数组中的元素a[0][2]即3,因为3小于5,而杨氏矩阵的每一行依次递增,所以5肯定不在矩阵的这一行,元素锁定到a[1][2]即6,因为6大于5,而杨氏矩阵的每一列依次递增,所以以a[1][2]为开头的这一列必然都大于5,此时锁定a[1][1],此时找到5,返回下标即可

实现代码:

<span style="font-size:18px;">struct sub{
	int col;
	int row;
};

//返回类型为结构体,a为传入的数组,ROW和COL分别为传入数组的行数和列数,
//sr为传入的结构体,用于返回两个下标
struct sub search_num(int *a, int num,int ROW, int COL, struct sub sr)
{
	int c = COL;
	sr.col = -1;                                     //初始化为-1若未找到该元素返回值为-1
	sr.row = -1;
	ROW = 0;
	COL = COL - 1;
	while ((ROW >= 0) && (COL <= (c - 1)))
	{
		if (*(a+ROW*c+COL)> num)
		{
			COL--;
		}
		else if (*(a + ROW*c + COL) < num)
		{
			ROW++;
		}
		else
		{
			sr.col = COL;                            //找到该元素替换下标
			sr.row = ROW;
			break;                                   //找到就结束循环
		}
	}
	return sr;                                       //找到该元素返回下标,否则返回-1,-1
}</span>
这个函数适用与求解任意维数的二维数组。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值