#include <stdio.h>
bool Find(int *matrix, int row, int col, int number)
{
bool found = false;
if(matrix == NULL && row <= 0 && col <=0 )
found=false;
for(int i=0,j=col-1;found==false && i <= row-1 && j>=0;) //取右上角位置; 停止条件:行加到满i-->row,列减到j-->0。
{
if(matrix[i*col+j] == number) //如果右上角位置元素==key, 找到,标记为true
found=true;
else if(matrix[i*col+j] > number)//如果右上角元素>key,则该列全部大于key 去掉该列
--j;
else //如果右上角元素<key,则该行全部小于key 去掉该行
++i;
}
return found;
}
int main()
{
int a;
int arr[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19 };
printf("数组为:\n");
for (int i = 0; i < 4; i++) //打印原来数组
{
for (int j = 0; j < 4; j++)
printf("%3d", arr[i][j]);
printf("\n");
}
printf("请输入一个数:");
scanf("%d", &a);
if (Find((int *)arr,4,4, a))
printf(" %d在该矩阵中\n", a);
else
printf(" %d不在该矩阵中\n", a);
return 0;
}