二维数组中的查找

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

假设数组为:

                                                                                      1     2     8     9

                                                                                      2     4     9     12   

                                                                                      4     7     10   13

                                                                                      6     8      11   15

刚开始的想法是从主对角线元素开始比较,若该正整数小于一个元素,则会排出一部分。排出的部分为剩余对角线元素所组成矩阵。

后来又想到比较边界元素即最后一行的元素和最后一列的第一个元素,a[length-1][0]和a[0][lenght-1],若该正整数小于a[length-1][0]则可以排出最后一行的所有元素,若大于则可以排出这一列,同样和a[0][length-1]比较的结果也是一样。重复上面的步奏直到找到该正整数或者未找到。


这样的边界元素有这样的特点:在所处行(列)中是最大的一个数,但是在所处的列(行)中却是最小的,也就是要么这个数是要找的数,要么肯定会排除一行或者一列。

选取左下角的元素则:column和row分别代表开始时的初始列号和行号,初始时column=0,row=max开始。

if(number>a[lmax][0])
{
    column++;
}
else
{
    row--;
}
若number大于a[]max[0]则说明第一列中没有该数字排除,第二比较的二维数组列的起始为colmun+1,反之则排除最后一行第二次比较的数组的列数为row-1。

初始化时:column=0,row=max-1;

bool find(int column,int row)
{
     while(colum<=max-1&&row>=0){
           if(number==a[column][row])
           {
                     return true;
                     break;
           }
            else if(number>a[row][column])
             {
                    column++;                
              }
              else
               {
                      row--;
               }
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值