在某個矩陣中,每行元素是遞增的,每列元素也是遞增的。即a[i][j]4 7 11 15
5 8 12 19
6 9 16 22
13 14 17 24
21 23 26 30,這便是乙個楊氏矩陣。
要在這樣的矩陣中查詢某個數值元素的位置,或者判斷某個數值在不在這個矩陣中。
1.線性法。每次都找最右上角的元素,如果要查詢數字(target)大於右上角的數字,則向下移動(刪除右上方元素所在一行),若要查詢數字(target)小於右上角的數字,則向左移動(刪除右上方元素所在一列),要在上述矩陣中查詢21,首先21與15比較,21>15,因此刪除第一行,右上方的元素變為19,21>19,刪除19所在的第二行,右上方元素變為22,21<22,刪除22所在的一列,右上方元素變為16,21>16,刪除16所在的一行,右上方元素變為17,21>17,刪除17所在的一行,右上角元素變為26,21<26,刪除26所在的一列,右上角元素變為23,21<23,刪除23所在的一列,右上方元素變為21,成功!如下圖所示:
//楊氏查詢線性搜尋演算法
#include#include#define max 100
using namespace std;
vectoryoung1(int array[4],int row,int col,int target)
while(begin_row < row && begin_col >= 0)
}v.push_back(-1);
v.push_back(-1);
return v;
}int main(void)
; vectorresult = young1(array,5,4,21);
for(vector::iterator it = result.begin();it != result.end();it ++)
if(target < array[lr][lc] || target > array[rr][rc])
int begin_row_index = (int)((lr+rr)/2);
int begin_col_index = (int)((lc+rc)/2);
if(array[begin_row_index][begin_col_index]==target)
else if(array[begin_row_index][begin_col_index] < target)
else
}int main(void)
; int a,b;
bool r = young2(array,5,4,21,0,0,4,3,a,b);
cout<
楊氏矩陣查詢
題目為 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序,如果在這個陣列中查詢數字6,則返回true 如果查詢數字10,由於陣列不含有該數字...
楊氏矩陣查詢
方案一 時間複雜度o m n 原理 從右上角開始 左下角相同 如果arr i j t,就向左查詢,如果arr i j 2013.7.23 0423 function 楊氏矩陣查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個...
楊氏矩陣查詢
題目描述 楊氏矩陣,即在乙個二維陣列中,每一行都按照從左到右嚴格遞增的順序排序,每一列都按照從上到下嚴格遞增的順序排序。請完成乙個函式,輸入這樣的乙個 n n的二維陣列和 m個整數,判斷陣列中是否含有上述 m個整數。你能解決這個問題嗎?輸入格式 可能有多個測試輸入,第一行給出總共的測試輸入的個數。對...