二分查詢指定的數,總是」找不到「,解決辦法

2021-10-19 09:06:53 字數 1175 閱讀 5007

#include

intbinary_search

(int arr,

int k)

else

if(arr[mid]

> k)

//如果中間下標對應的值小於要查詢的值,則右下標-1

else

如果中間下標對應的值等於要查詢的值,則返回此下標

}return-1

;}intmain()

;int k =7;

int ret =

binary_search

(arr, k)

;//呼叫 binary_search函式

if(ret ==-1

)else

return0;

}

這段**的輸出總是輸出「找不到」,原因在於

int sz = sizeof(arr) / sizeof(arr[0]);//求陣列長度

這行**放在函式體裡面,因為此時傳過來的arr僅僅是陣列首元素的位址,所以這行**sz始終為1。

解決辦法:將int sz = sizeof(arr) / sizeof(arr[0]);//求陣列長度

將這行**放入main函式裡,並且增加引數,sz

改正後:

#include

intbinary_search

(int arr,

int k,

int sz)

else

if(arr[mid]

> k)

//如果中間下標對應的值小於要查詢的值,則右下標-1

else

如果中間下標對應的值等於要查詢的值,則返回此下標

}return-1

;}intmain()

;int k =7;

int sz =

sizeof

(arr)

/sizeof

(arr[0]

);//求元素個數

int ret =

binary_search

(arr, k,sz)

;//呼叫 binary_search函式

if(ret ==-1

)else

return0;

}

此時可以正確找到下標,下標是6

二分查詢數

二分搜尋,也稱折半搜尋 二分查詢,是用來在乙個有序陣列中查詢某一元素的演算法。以在乙個公升序陣列中查詢乙個數為例。它每次考察陣列當前部分的中間元素,如果中間元素剛好是要找的,就結束搜尋過程 如果中間元素小於所查詢的值,那麼左側的只會更小,不會有所查詢的元素,只需要到右側去找就好了 如果中間元素大於所...

二分查詢與二分答案 A B 數對

出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。第一行,兩個整數 n,c。第二行,...

二分查詢的平均查詢長度 二分查詢

資料的查詢在計算機的操作中非常常見,那麼我們應該怎樣在計算機中實現查詢操作呢?最簡單的一種方法 傻找 也就是乙個乙個的找,我們把陣列中的每個元素都和我們想要查詢的目標元素進行比對,看一下列表中是否有和這個元素相同的元素,如果我們想要尋找的那個目標元素在列表 現了,那麼就宣告查詢成功,這種演算法寫成 ...