二维数组的特点是:列呈递增状态,行也呈递增状态
#include<iostream>
using std::endl;
using std::cout;
using std::cin;
bool find(int* arr, int rows, int columns, int numbers) {//传进来的是一个一维数组,所以用一级指针
bool found = false;
if (arr != nullptr && rows > 0 && columns > 0) {
int row = 0;
int column = columns - 1;
while (row < rows && column >= 0) {
if (arr[row * columns + column] == numbers)//row*columns+column为每个矩阵右上角的下标,如果等于numbers就找到了
{
found = true;
return found;
}
else if (arr[row * columns + column] > numbers)//如果右上角的值大于寻找值,那么该列去除
--column;
else ++row;//如果右上角的值小于寻找值,那么该行去除
}
}
return found;
}
int main()
{
int arr[16] = { 1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7 };
cout<<find(arr, 4, 4, 10);
cin.get();
cin.get();
return 0;
}