折半查找(调试)
折半查找:
数字: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;
}