二維陣列中的查詢

2021-08-13 23:59:39 字數 1585 閱讀 9288

題目描述

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

分析:128

9249

124710

136811

15 從二維陣列最右上角的數值(9)開始比較,若目標比該數大,則目標肯定在該數的下方,反之,在該數的左方。根據此規則,尋找下乙個比較的數值,重複以上規則,直到找到目標數,或者陣列越界。

//

// main.c

// func

//// created by 52coder on 2017/12/18.

//#include int find(int

matrix,int rows,int columns,int number)

else

if(matrix[row * columns + col] > number)

else}}

return0;}

int search(int (*matrix)[4],int rows,int columns,int number)

else

if(matrix[row][col] > number)

else}}

return0;}

int main(int argc, const char * argv)

; printf("%d\n",find(a, 4, 4, 7));

int b[4][4]=;

printf("%d\n",search(b, 4, 4, 7));

return

0;}

上面的**中提供了兩種解決問題的方法,第一種是按照一維陣列的形式所寫,書中給出的答案如此,那麼如何用二維陣列的形式傳參呢?

最近剛好在看《c語言程式設計》大名鼎鼎的k&&r,其中有如下介紹,可以參考文章c語言拾遺閱讀全部讀書筆記。

daytab[2][13]=, }

如果將二維陣列作為引數傳遞給函式,那麼函式的引數宣告中必須指明陣列的列數。陣列的行數沒有太大關係,函式呼叫時傳遞的是乙個指標,它指向由行向量構成的一維陣列,其中每個行向量是具有13個整型元素的一維陣列,

在該例子中,傳遞給函式的是乙個指向很多物件的指標,其中每個物件是由13個整型元素構成的一維陣列。因此,如果將陣列daytab作為引數傳遞給函式f,那麼f的宣告應該寫成如下形式:

f(int daytab[2][13])

也可以寫成

f(int daytab[13])

由於陣列的行數無關緊要,所以該宣告還可以寫成:

f(int (*daytab)[13])

這種宣告形式表明引數是乙個指標,它指向具有13個整型元素的一維陣列。因為方括號的優先順序高於*的優先順序,所以上述宣告中必須使用圓括號,如果去掉圓括號

int

*daytab[13]

則變成宣告乙個陣列,該陣列有13個元素,其中每個元素都是乙個指向整型物件的指標。一般來說,除陣列的第一維可以不指定大小外,其餘各維必須明確指定大小。

二維陣列中查詢

1.問題描述 在乙個二維陣列中,每一行按照從左到右的遞增順序排序,每一列按照從上到下的遞增的順序排序,請完成這樣乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列是否含有該整數。來自 劍指offer 2.分析 首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束 如果該數字大於要查...

二維陣列中查詢

乙個二維陣列,每一行從左到右,每一列從上到下,都是按遞增順序排列,輸入乙個二維陣列和某個數,判斷陣列中是否存在這個數 排除行和列 比如從右上角元素出發。先確定列的範圍,如果查詢數大於當前列的第一行數,那麼這一行的所有數都大於查詢數,排除,繼續查詢左邊列 確定行範圍,在前面列的範圍內,如果最右邊元素小...

二維陣列中查詢

題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路解析 這是一道比較基礎的題,就是找二維陣列中的乙個數。方案一 暴力 function find target,array...