在一个二维有序数组中,查找指定的数据是否存在

Say Given a 2d array where all the numbers in the array are in increasing order from left to right and top to bottom.

What is the best way to search and determine if a target number is in the array?

sample:

int a[][] = {
        {1,    3,    5,    7,    9},
        {2,    6,    11,    13,    15},
        {4, 12,    17, 19, 21},
        {8, 14, 18, 23, 25}//,
        //{10,16, 20, 24, 26}
};

A: solution 1

从左下脚开始扫描需要查找的值value,

1. 如果 value == a[row][col],说明找到,返回

2. 如果value < a[row][col],那么row--

3. 如果value > a[row][col],那么col++

4. 如果一直到 row < 0 && col > max_col,说明没有找到,失败。

 

示例代码(passed testing)

View Code
    static boolean search2ndArrayData(int value)
{
int a[][] = {
{1, 3, 5, 7, 9},
{2, 6, 11, 13, 15},
{4, 12, 17, 19, 21},
{8, 14, 18, 23, 25}//,
//{10,16, 20, 24, 26}
};

if (value < a[0][0] || value > a[3][4])
return false;

int row = 3;
int col = 0;

while (col < 5 && row >= 0)
{
if (a[row][col] == value)
{
System.out.printf("find data %d row and column are [%d][%d]\n", value, row, col);
return true;
}
else if (a[row][col] < value)
col++;
else
row--;
}

return false;
}



posted @ 2012-01-06 12:02  百分百好牛  阅读(484)  评论(0编辑  收藏  举报