二位數組中數字的查找

        問題描述:在一個二維數組中,每一行都按照從左到右的遞增順序排列,每一列都按照從下到上遞增的順序排列。請完成一個函數,輸入這樣的一個二位數組和一個整數,判斷數組中是否含有該數。

       實例:下面二位數組,每行每列是遞增的,如果查找10,返回true;如果查找數字11,則返回false;

      1   3     5     7
      2   4     6     8
      4   10    12    15
      6   13    17    19
      圖示(查找10):
 
        (1)10大於7,下次要在7的下邊區域(紅色框)查找

      (2)10大於8,下次要在8的下標區域(紅色框)查找

      (3)10小於15,下次要在15的左邊區域(紅色框)查找
        通過圖示我們發現,如果要數組右上角數字大於查找數字,根據題目要求要在下一行進行查找(row++);如果該數字小於查找數字,則要在該行的逐列進行查找(col--);如果該數字恰好等於查找數字,表示查找成功。
代碼實現:
//matrix表示數組,row表示行,col表示列,key表示要查找數字
bool _Find(int *matrix,int row,int col,int key)
{
    assert(matrix);
    assert(row > 0);
    assert(col > 0);
    int _row=0;
    int _col=col-1;
    while(_row < row && _col >=0)
    {
         //數組右上角數字大於查找數字
         if(matrix[_row * col + _col] > key)
             _col--;
         //數組右上角數字小於查找數字
         else if(matrix[_row * col + _col] < key)
             _row++;
         //右上角數字等於查找數字
         else
             return true;
    }
    return false;
}

發佈了49 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章