二维数组中查找某个数是否存在

问题描述:在一个二维数组中,每一行按照从左道右递增的顺序排列,每一列按照从上到下递增的顺序排列。给定一个数值,判断二维数组中是否存在这个数字。

思路分析:首先选取数组中右上角的数字,如果该数字等于要查找的数字,查找过程结束;如果小于要查找的数字,那么去除这个数字所在的列;如果大于要查找的数字,那么去除这个数字所在的行,迭代进行,最终得出是否存在这个数字。

代码如下:

#include <iostream>
using namespace std;


class Two_DimenArray
{
public:
 Two_DimenArray();
 Two_DimenArray(int row1, int cloumn1);
 Two_DimenArray(int* intialArray,int irow, int icolumn);
 ~Two_DimenArray();
 int getRow();
 int getColumn();
 int getValue(int m, int n);
 bool find(int number);
private:
 int row;
 int column;
 int* valueArray;
};
Two_DimenArray::Two_DimenArray()
{
 row=0;
 column=0;
 valueArray=new int[0];
}
Two_DimenArray::Two_DimenArray(int row1, int column1)
{
 row=row1;
 column=column1;
 valueArray=new int[row1*column1];
}
Two_DimenArray::Two_DimenArray(int* intialArray,int irow, int icolumn)
{
 //从语义上来讲,函数参数中的指针不应该用const修饰,
 //既然用指针传递,就应该意味着参数会被修改,
 //如果函数体不修改参数,应该用const引用或者传值,从而intinalArray不用const
 valueArray=intialArray;
 row=irow;
 column=icolumn;
}
Two_DimenArray::~Two_DimenArray()
{
 delete []valueArray;
 valueArray=NULL;
}
int Two_DimenArray::getValue(int m,int n)
{
 return valueArray[m*row+n];
}

int Two_DimenArray::getRow()
{
 return row;
}
int Two_DimenArray::getColumn()
{
 return column;
}

//判断数组中是否存在与number相同的数
bool Two_DimenArray::find(int number)
{
 bool found=false;
 if(valueArray!=NULL && row>0 && column>0)
 {
  int row0=0;
  int column0=column-1;
  while(row0<row&&column>=0)
  {
   if(valueArray[row0*row+column0]==number)
   {
    found=true;
    break;
   }
   else if(valueArray[row0*row+column0]>number)
     column0--;
     else
      row0++;
  }
 }
 return found;
}
int main()
{
int irow=3,icolumn=3;
int a[]={1,2,3,4,5,6,7,8,9};
Two_DimenArray b(a,irow,icolumn);
int number;
cout<<"请输入您要查找的数字:"<<endl;
cin>>number;
bool found=b.find(number);
if(found)
 cout<<"找到数字!"<<endl;
 else
 cout<<"无此数字!"<<endl;

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值