假设有一个二维数组,用右边大于左边的元素,下边大于上边的元素来储存,那么如何能快速查到目标值key。
算法原则如下:
从右上角的数开始,因为右上角的数,大于左边的所有数字,小于下边的所有数字。
执行下面三个操作:
1. 若与查找的一样,则找到;
2. 若大于查找的数字,则整个列都可以排除;
3. 若小于查找的数,那么整个行都可以排除。
代码如下:
bool FindK(int *matrix, int rows, int cols, int key)//目的是为了找打key
{
bool found = false;//初始化
if (matrix != NULL&&rows>0&&cols>0)//判断输入的正确性
{
int row = 0;
int col = cols - 1;//起始的左上角
while (row < rows&&col >= 0)
{
if (matrix[row*cols + row] == key)
{
found = true;
break;
}
else if (matrix[row*cols + row] > key)
--col;
else if
++row;
}
}
return found;
}