二維矩陣(楊氏矩陣)查詢

2021-07-09 12:26:10 字數 893 閱讀 9579

定義:

從左到右,從上到下,依次增大

查詢某元素

假設矩陣為

1     2   8   9

2    4    9   12

4    7   10  13

6    8    11  15

在裡面查詢7,如果我們從1開始,則1的右半部分,也就是剩下矩陣的全體,都可能會存在7,這是顯然不行的,我們要確定乙個確切的查詢規則,它沿著特定路線走,最後找到

我們看其規律,如果說要查詢的元素比當前元素大,則在其右半部與下半部   如果比當前元素小,則在其左半部與上半部。

而如果我們從右上角開始,9開始,查詢7,首先7小於9,所以要在其左半部分與上半部分查詢,9的上半部分是沒有的,左半部分就是第1 2 3 列,第4列排除掉(注意這個排除掉的意思,意思是說7不可能在這裡了)

我們往左走到8,7比8小,同樣我們還得往左走,那就是2,

7比2大,所以我們就找右下兩部分,右半部分,第3 4 列,我們其實前面已經排除了,只剩下下邊的,於是我們從2開始往下走,走到了4

······以此類推

楊氏矩陣難點在於如何選擇起始點,以及為什麼要選擇這個起始點。這一點一定要搞清楚。

我們這裡找到大於要尋找的元素,不再為向下還是向右猶豫不決了,我們只需要向下,碰到小於要尋找的元素也是如此。

#include #include using namespace std;

int a[4][4]=,,,};

int k=0;

bool findelem(int row,int col)

{ while((row>=0&&row<4)&&(col>0&&col<4))

{ if(a[row][col]=k)

return true;

if(a[row][col]

二維陣列中的查詢 楊氏矩陣

二維陣列中的查詢,楊氏矩陣 題目 在乙個二維陣列中,每行都按照從左到右的遞增的順序排序。每列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個陣列和乙個數,判斷陣列中是否包含這個數。例如 二維陣列 1 2 3 4 5 6 7 8 9 查詢數字7.注意 此題不是簡單的便利整個陣列進行查詢,此...

楊氏矩陣查詢

題目為 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序,如果在這個陣列中查詢數字6,則返回true 如果查詢數字10,由於陣列不含有該數字...

楊氏矩陣查詢

方案一 時間複雜度o m n 原理 從右上角開始 左下角相同 如果arr i j t,就向左查詢,如果arr i j 2013.7.23 0423 function 楊氏矩陣查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個...