这个答案不是我想出来的,而是看的书上的,然后我把答案默写出来了,不过改成c语言下可以正确运行的了,令我没想到的是c语言竟然没有bool类型,结果代码一直出错。
这里面也用到了这样一个知识点:在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。
#include <stdio.h>
typedef int bool;
#define true 1
#define false 0
bool search(int *matrix, int rows, int columns, int number)
{
bool found = false;
int row = 0;
int column = columns - 1;
if(matrix != NULL && rows > 0 && columns > 0)
{
while(row < rows && column >= 0)
{
if(matrix[row * columns + column] == number)
{
found = true;
break;
}else if(matrix[row * columns + column] > number)
{
column--;
}else if(matrix[row * columns + column] < number)
{
row++;
}
}
}
return found;
}
void main()
{
int test[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
if(search((int *)test, 4, 4, 11) == true)
{
printf("要找的数在数组中\n");
}else
{
printf("要找的数不在数组中\n");
}
}