//************************************************************************************//
// 杨氏矩阵,从左到右依次增加,从上到下依次增加
// 在矩阵中查找是否存在指定数字
// 计算次数小于O(N)
//************************************************************************************//
// 思路:比较矩阵右上角或者左下角的值可以去除行或者列,减小计算量
通过返回型参数将目标数字的坐标带回主函数进行输出,使函数保持干净状态
#include<stdio.h>
#include<string.h>
int FindNum(int arr[3][3], int k, int* row, int* col)
{
int x = 0;
int y = *col - 1;
while (x <= *row-1 && y >= 0)
{
if (arr[x][y] < k)
{
x++;
}
else if (arr[x][y] > k)
{
y--;
}
else
{
*row = x;
*col = y;
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
int obj_num = 8;
int x = 3;
int y = 3;
int ret = FindNum(arr, obj_num, &x, &y);
if (ret == 1)
{
printf("找到了。\n");
printf("下标为%d,%d。\n",x,y);
}
else
{
printf("找不到\n");
}
return 0;
}
在杨氏矩阵中查找是否存在指定数字,计算次数小于O(N)
最新推荐文章于 2024-09-27 19:15:27 发布