楊氏矩陣查詢

2021-09-02 10:55:17 字數 1347 閱讀 2373

在某個矩陣中,每行元素是遞增的,每列元素也是遞增的。即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個整數。你能解決這個問題嗎?輸入格式 可能有多個測試輸入,第一行給出總共的測試輸入的個數。對...