您的位置:首页 > 其它

面题3 二维数组的查找

2015-07-18 21:29 323 查看
数组在内存中是连续存储的,可以根据下标在O(1)时间内读写任何元素,因此时间效率是很高的。当数组作为函数的参数进行转递时,数组自动退化为同类型的指针。
1、提出问题
在一个二维数组中,每一行按从左到右递增顺序排序,每一列从上到下。编写一个函数,输入这样一个二维数组,判断数组中是否含有该整数。

2、分析问题
查找时当所选数组元素小于该数时,则查找范围在所选数的右边或下边,很明显右下的查找元素重复了。我们可选取右上角为基准点,当该数大于查找数,则可以剔除该列。当该数小于查找数时,可以剔除该行。也就是说如果该查找数不位于右上角,则每次可以删除一行或一列,直到找到待查找元素或区域为空。

3、解决问题
根据上面思路,代码如下:
bool Find(int* matrix,int rows,intcolumns,int num)
{
boolfind=false;
introw=0;
intcolumn=columns-1;
if(matrix!=NULL&&rows>0&&columns>0)
{
while(row<rows&&column>=0)
{
if(matrix[row*column+column]==num)
{
find=true;
break;
}
else
{
if(matrix[row*column+column]>num)
column--;
else
row++;
}
}
}
returnfind;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: