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