這是算法導論和劍指offer中的一個編程題,也被經常用作面試題。
題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
例如:下面的二維數組就是每行、每列都遞增排序。如果在這個數組中查找數字7,則返回true;如果查找數字5,則由於數組不含該數字,返回false。
假如現在要判斷在這個二維矩陣中是否包含數字7,則查找步驟如下所示:
(a) 9>7,下次在9的左側查找; (b) 8>7,下次在8的左側查找;
(c) 2<7,下次在2的下側查找; (d) 4<7,下次在4的下側查找。
則該算法的代碼可以表述如下:
bool Find(int** matrix, int rows, int columns, int number){ bool found=false; if(matrix!=NULL && rows>0 && columns>0){ int row=0; int column=columns-1; while(row<rows && column>=0)){ if(matrix[row][column]==number){ found=true; break; }else if(matrix[row][column]>number){ --column; }else { ++row; } } } return found; }