折半查找:
數字:1,2,3,4,5,6,7,8,9,10
下標:0,1,2,3,4,5,6,7,8,9
(0+9)/2=4 low=5 5<9 輸出
(4+9)/2=6 low=7 7<9 輸出
(6+9)/2=7 low=7 8<9 輸出
(7+9)/2=8 low=9 9<9(錯誤) 不能輸出,所以程序改正時應加上=
當低位進行比較時,由於相等時已經進行比較一次則不可重複進行比較,所以,
當mid<key時,將mid值往後加一位進行比較
當mid>key時,將mid值往前挪一位進行比較
輸出結果時由於起始值給定爲0,不在所查找的範圍之內,輸出-1
後面值依次輸出下標,到9結束,查找3次,後面兩次也爲-1
#include<stdio.h>
int BinSearch(int*arr,intlen,intkey)
{
intlow = 0;
inthigh = len - 1;
intmid;
while(low<=high)
{
mid=(low+ high) >> 1;//(low+high)/2
if(arr[mid]== key)
{
returnmid;
}
elseif(arr[mid]< key)//後半段查找
{
low= mid+1;
}
else
{
high= mid-1;
}
}
return-1;
}
int main()
{
intarr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for(inti = 0; i<13; i++)
{
printf("%d\n", BinSearch(arr, 10, i));
}
return0;
}