我们来分析一下:我们可以找特殊点,比如 5 或者 11
5是一行里面最大的,一列里面最小的
11是一行里面最小的,一列里面最大的
5:当我们要找的数比5大时,这一行肯定没有比5大的,所以我们就要让行+1,
当我们要找的数比5小时,肯定在这一行里面,所以我们让列-1
void Seek(int arr[3][5], int k)
{
int x = 0;
int y = 4;//这里就是把坐标指向5
while (x <= 2 && y >= 0)
{
if (arr[x][y] > k)//如果比要找的数大,列就-1
{
y--;
}
else if (arr[x][y] < k)//如果必要找的数小,行就+1
{
x++;
}
else
{
printf("找到了\n");
break;//找到了就跳出循环
}
}
if (x > 2 || y < 0)//到这我们不知道是循环结束了还是break跳出来的,所以加个if判断
printf("找不到\n");
}
int main()
{
int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
int k = 14;//我们这里直接写出来,也可以搞一个scanf,都一样
Seek(arr, k);
return 0;
}