剑指offer---面试题4:二维数组的查找

博文仅供人学习笔记之用,如有不详细之处,建议读者找原书来学习。

题目见《剑指offer书第二版第44页》

我自己写的源码:
#include <cstdio>

bool Find(int* matrix, int rows, int cols, int number)
{
bool findresult = false;
if (matrix == nullptr || rows <= 0 || cols <= 0)     //细节
return findresult;


int row =0; int col = cols - 1;


while (row<=rows&&col>=0)
{
if (matrix[row*cols + col] == number)
{
findresult = true;

break;

                }

else
{
if (matrix[row*cols + col] > number)
--col;

else ++row;
}
}

return findresult;
}


void Test(int* matrix,int rows,int cols,int sortnumber)
{
if (Find(matrix, rows, cols, sortnumber) == true)
printf("找到了\n");
else
printf("没找到\n");
}


int main()
{
int sortnumber = 55555555555;
int matrix[][4] = { 5, 6, 7, 8, 1, 2, 3, 4, 11, 22, 33, 44 };

        Test((int*)matrix, 3, 4, sortnumber);

return 0;

}



原书作者给出处的代码:

#include <cstdio>


bool Find(int* matrix, int rows, int columns, int number)
{
    bool found = false;


    if(matrix != nullptr && rows > 0 && columns > 0)
    {
        int row = 0;
        int column = columns - 1;
        while(row < rows && column >=0)
        {
            if(matrix[row * columns + column] == number)
            {
                found = true;
                break;
            }
            else if(matrix[row * columns + column] > number)
                -- column;
            else
                ++ row;
        }
    }


    return found;
}


// ====================测试代码====================
void Test(char* testName, int* matrix, int rows, int columns, int number, bool expected)
{
    if(testName != nullptr)
        printf("%s begins: ", testName);


    bool result = Find(matrix, rows, columns, number);
    if(result == expected)
        printf("Passed.\n");
    else
        printf("Failed.\n");
}


//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
// 要查找的数在数组中
void Test1()
{
    int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
    Test("Test1", (int*)matrix, 4, 4, 7, true);
}


//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
// 要查找的数不在数组中
void Test2()
{
    int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
    Test("Test2", (int*)matrix, 4, 4, 5, false);
}


//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
// 要查找的数是数组中最小的数字
void Test3()
{
    int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
    Test("Test3", (int*)matrix, 4, 4, 1, true);
}


//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
// 要查找的数是数组中最大的数字
void Test4()
{
    int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
    Test("Test4", (int*)matrix, 4, 4, 15, true);
}


//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
// 要查找的数比数组中最小的数字还小
void Test5()
{
    int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
    Test("Test5", (int*)matrix, 4, 4, 0, false);
}


//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
// 要查找的数比数组中最大的数字还大
void Test6()
{
    int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
    Test("Test6", (int*)matrix, 4, 4, 16, false);
}


// 鲁棒性测试,输入空指针
void Test7()
{
    Test("Test7", nullptr, 0, 0, 16, false);
}


int main(int argc, char* argv[])
{
    Test1();
    Test2();
    Test3();
    Test4();
    Test5();
    Test6();
    Test7();


    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_34793133/article/details/80562710