:x>A(mid):low<-mid+1
:else:j<-mid;return j
end case
repeat
j<-0;return j
end BINSRCH
我们在这里可以看到主要是通过low和high还有mid来控制查询的,low和high是随着程序的运行而逐步发生改变的。程序是有出口的当我们发现low不是≤high的时候我们就可以退出了说明找不到。
这是我个人所书写的代码
#include
#include
int w[7] = {0, 5, 10, 12, 13, 15, 18};//数组元素
int low;int high;int mid; int n;
void pd(int n,int low,int high){
if(low<=high){
mid=(low+high)/2;
if(n>w[mid-1]){
low=mid+1; pd(n,low,high);//low发生改变在重新调用该函数
}
if(n
high=mid-1; pd(n,low,high);//high发生改变再重新调用该函数
}
if(n==w[mid-1]){
printf("查找成功\n");
printf("是数组中第%d个数字",mid);
exit(0);
}
}
else//查找失败了需要跳出去
printf("查找失败\n");
}
int main()
{
printf("输入你想要查找的数字\n");
scanf("%d",&n);
pd(n,1,7);
return 0;
}
这个算法是很简单的是很容易理解的,但是局限性是很明显的它必须要求是有序的数组这个限制就很大了
时间复杂度:
成功:最好 O(1)
平均 O(logn)
最坏 O(logn)
不成功: O(logn)