以上图3×3矩阵为例,矩阵的特殊值位于四个顶角,从3开始分析,当所选值k小于3时由于矩阵从上到下递增,故排除3所在的一列数据,得到左图;若k大于3,由于矩阵从左到右递增,故排除3所在一行,得到右图
重复上述过程,不断取右顶点来减少行或列缩小范围。
代码如下
void find_k(int arr2[3][3], int k, int x, int y)
{
while (arr2[x][y] != k&&x>=0&&y>=0)
{
if (k < arr2[x][y])//当右上角值大于k时排除k所在的一列反之排除所在行
{
y--;
}
else
{
x++;
}
}
if (arr2[x][y] == k)
printf("找到了,下标为%d %d\n ", x, y);
else
printf("找不到\n");
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };//以3*3矩阵为例
int k = 0;//要查找的值
int x = 0;
int y=2;//行数和列数的下标
scanf_s("%d",&k);
find_k(arr, k, x, y);
return 0;
}