在一個二維數組中,每一行都按照從左至右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。例如下面的二維數組就是每行、每列都遞增排序。如果在這個數組中尋找數字7,則返回true;如果尋找數字5,由於數組不含有該數字,則返回false。 我的解題思路是這樣的矩陣行列都是從小到大排好序的,要尋找的話自然用二分效率比較高,而且這樣的矩陣有個性質,最左上方的元素必定是最小值,最右下角的是最大值,在一個n*n的矩陣中,對角線的元素也是排好序的,找到對角線上的一個元素,使得這個元素小於待尋找的key,並且下一元素大於待尋找的key,那麼只要在這個元素的左下角矩陣和右上方矩陣遞迴繼續對角線尋找就可以了,例如例子裡尋找7,只要找到對角線的元素4,然後遞迴尋找紅圈的矩陣就可以了,左上方矩陣最大值4<7,右下角矩陣最小值10>7,無需尋找了,但是此題並沒有告訴我們原始矩陣是n*n的,這是比較麻煩的地方,不過思路是一樣的,無非不能用對角線尋找這樣簡單的辦法了,假設m*n的矩陣,對角線尋找的辦法改進為i = (m1+m2)/2,j = (n1+n2)/2 進行尋找就可以了,(m1,n1)為矩陣最左上方元素下標,(m2,n2)為最右下角元素下標假設尋找17,第一次比較10,然後比較25,然後比較13,返回元素13,這時候再遞迴尋找13左下角的矩陣和右上方的矩陣就可以了(紅色橢圓部分);如果是尋找9,第一次比較10,然後比較4,然後比較6,返回元素6,這時候遞迴尋找6左下角的矩陣和右上方矩陣(綠色橢圓部分)代碼如下:a是二維數組首地址,(m1, n1)左上方座標,(m2, n2)右下角座標,參數n是矩陣一行的元素個數int binsearch(int value, int *a, int n, int m1, int n1, int m2, int n2)