杨氏矩阵中,定义一个函数查找数字

//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);

数组:
1 2 3
2 3 4
3 4 5

1 3 4
2 4 5
4 5 6

1 2 3
4 5 6
7 8 9

【解题思路】
因为数组的每行从左到右是递增的,每列从上到下是递增的.
定义行 i,列 j 置于一行中最后一位(即一行中最大的数字),定义一个temp第一行最后一个数字
比较temp与所给值(num)得大小。
如果num>temp,i++,比较下一行大小
如果num<temp,说明数字可能在这一行,则 i 不变,递减 j。
如果相等,则返回1
如果遍历完全,没有找到返回0

#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
int Search(int arr[ROW][COL], int num)
{
	int i = 0;
	int j = COL - 1;
	int temp = arr[i][j];
	while (1)
	{
		if ((num > temp) && (i < ROW - 1))
		{
			temp = arr[++i][j];
		}
		else if ((num<temp) && (j>0))
		{
			temp = arr[i][--j];
		}
		else if (num == temp)
		{
			return 1;
		}
		else
			return 0;
	}
}
int main()
{
	int arr[ROW][COL] = {
		{ 1, 3, 4 },
		{ 2, 4, 5 },
		{ 4, 5, 6 },
	};
	int num = 0;
	printf("请输入要查找的数字!\n");
	scanf("%d",&num);
	if (Search(arr, num) == 1)
	{
		printf("找到了!\n");
	}
	else
	{
		printf("不存在此数!\n");
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44936160/article/details/91129278