在杨氏矩阵中查找一个数并输出它的坐标。

杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
思路:要查一个数在此数组中,查到它存在的第一个数字即可。从右上角开始,若查找的数比它小,则向前推一列。若查找的数比它小,则向下加一行。

void Find(int arr[3][3], int *px, int *py, int key)
{
	int x = 0;
	int y = *py - 1;
	while (x < *px && y >= 0)
	{
		if (arr[x][y] > key)
		{
			y--;//向前推一列
		}
		if (arr[x][y] < key)
		{
			x++;//向下加一行
		}
		if (arr[x][y]==key)
		{
			*px = x;
			*py = y;
			return;
		}
	}
	//若输入了数组中不存在的数字,则返回(-1,-1)
	*px = -1;
	*py = -1;
}
int main()
{
	int arr[3][3] = { { 1, 2, 3 }, { 2, 3, 4 },{3, 4, 5 } };
	int x = 3;
	int y = 3;
	int key=0;
	printf("请输入一个数字:")
	scanf("%d",&key);
	Find(arr, &x, &y,key);
	printf("%d,%d\n", x, y);
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值