题目:杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于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
Search函数:
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;
}
}
#define _CRT_SECURE_NO_WARNINGS 1
#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;
}