//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
在这个函数里,我并没有将循环嵌套,这样时间复杂度就小了,第一个循环是找出可能有这个数的行,第二个循环(在外面)是在这个行中找出这个数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int one_search(int arr[][3], int line, int row, int k)
{
int i = 0;
int j = 0;
for (i = 0; i < line; i++)
{
if (arr[i][row - 1] > k)
{
break;
}
else if (arr[i][row - 1] == k)
{
return 1;
}
}
for (j = 0; j < row; j++)
{
if (arr[i][j] == k)
{
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3] = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } };
int line = sizeof(arr) / sizeof(arr[0]);
int row = sizeof(arr[0]) / sizeof(arr[0][0]);
int a = 2;
int ret = one_search(arr, line, row, a);
if (ret == 1)
{
printf("有这个数\n");
}
else if (ret == 0)
{
printf("没这个数\n");
}
system("pause");
return 0;
}