二维数组中的查找
Posted wanglelelihuanhuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组中的查找相关的知识,希望对你有一定的参考价值。
题目:在一个二维数组中,每一行都按从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增的数组。如果在这个数组中查找数字7,则返回true;如果在这个数组中查找数字13,则返回false。
思路:1、选取数组右上角的数字4。由于9大于7,并且9是第4列第一个数字,所以7不可能在9所在的列。
2、接下来分析剩下的三列,在剩下的矩阵中,右上角的数字8同样大于7,所以7也不可能在8所在的列,剔除该列。
3、接下来分析剩下的两列,右上角的数字2小于7,所以7可能在2的下边。剔除2所在的行。
4、接下来分析剩下的三行两列,右上角数字4小于7,剔除4所在的行。
5、在剩下的两行两列中,右上角数字7刚好是要找的数字。
#include<iostream>
#include<assert.h>
using namespace std;
bool Find(int arr[][4], int rows, int cols, int number)
assert(arr);
if (rows > 0 && cols > 0)
//选取数组右上角的数字
int row = 0;
int col = cols - 1;
while (row < rows && col >= 0)
if (arr[row][col] == number) //如果该数字等于要查找的数字,返回true
return true;
else if (arr[row][col] > number)//如果该数字大于要查找的数字,剔除该数字所在的列
--col;
else //如果该数字小于要查找的数字,剔除该数字所在的行
++row;
return false;
int main()
int arr[][4] = 1, 2, 8, 9 , 2, 4, 9, 12 , 4, 7, 10, 13 , 6, 8, 11, 15 ;
bool ret=Find(arr,4,4,0);
printf("%d\\n", ret);
return 0;
以上是关于二维数组中的查找的主要内容,如果未能解决你的问题,请参考以下文章