[英]Need help in implementing a binary search in C
由於我不希望我的代碼被班上其他人復制的原因而將其刪除。
您只需將偽代碼轉換為代碼即可。 我會給你一些更完善的偽代碼:
1)將我們正在尋找的東西的最小可能位置( min
)設置為零。
2)將我們正在尋找的東西的最大可能位置( max
)設置為可能的最高位置。
3)將位置loc
計算為(min+max)/2
。
4)檢查loc
保存了我們要查找的對象。 如果是這樣,停下來,我們找到了。
5)檢查min>=max
。 如果是這樣,請停止,它不在這里。
5)如果loc
處的對象太高,請將max
設置為loc-1
。 (因為最大位置可能比loc
,因為loc
太高。)
6)如果loc
處的對象太低,請將min
設置為loc+1
。 (相同的邏輯,反之亦然。)
7)轉到步驟3。
SOLN;
unsigned char search(int value, int array[], int n)
{
int start = 0;
int end = n;
int mid;
// We ll exit the while loop if we just started overlapping
while(start<=end)
{
// Calculating the new mid point
// Can also be written as mid = (start + end)/2;
mid = start + (end-start)/2;
if(value == array[mid])
return 1;
// If value is less we search on the left side
if(value < array[mid])
end = mid - 1;
else
start = mid + 1;
}
return 0;
}
您在那里有算法。 只需從兩個索引值開始-低和高。 將它們初始設置為數組中的第一個和最后一個條目。
接下來,在高點和低點之間選擇一個(整數)值。 探測該數組元素。 如果它等於期望值,那么就完成了。 如果低於/小於/早於所需值,則將“低”設置為探頭元素索引+1。 如果它大於/大於/大於期望值,則將“高”設置為探頭元素索引-1。 然后返回(在您的while循環中)並選擇一個新的“中途”值。
如果到達從低到高的位置(在while條件下檢查),則找不到該值。
(我要補充一點,該算法基本上很簡單,但是如果您認為效果不佳並嘗試采用一些捷徑,則可能會令人沮喪。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.