二位数组中数字的查找

        问题描述:在一个二维数组中,每一行都按照从左到右的递增顺序排列,每一列都按照从下到上递增的顺序排列。请完成一个函数,输入这样的一个二位数组和一个整数,判断数组中是否含有该数。

       实例:下面二位数组,每行每列是递增的,如果查找10,返回true;如果查找数字11,则返回false;

      1   3     5     7
      2   4     6     8
      4   10    12    15
      6   13    17    19
      图示(查找10):
 
        (1)10大于7,下次要在7的下边区域(红色框)查找

      (2)10大于8,下次要在8的下标区域(红色框)查找

      (3)10小于15,下次要在15的左边区域(红色框)查找
        通过图示我们发现,如果要数组右上角数字大于查找数字,根据题目要求要在下一行进行查找(row++);如果该数字小于查找数字,则要在该行的逐列进行查找(col--);如果该数字恰好等于查找数字,表示查找成功。
代码实现:
//matrix表示数组,row表示行,col表示列,key表示要查找数字
bool _Find(int *matrix,int row,int col,int key)
{
    assert(matrix);
    assert(row > 0);
    assert(col > 0);
    int _row=0;
    int _col=col-1;
    while(_row < row && _col >=0)
    {
         //数组右上角数字大于查找数字
         if(matrix[_row * col + _col] > key)
             _col--;
         //数组右上角数字小于查找数字
         else if(matrix[_row * col + _col] < key)
             _row++;
         //右上角数字等于查找数字
         else
             return true;
    }
    return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值