书中给我的功能----
/* binsearch find x in v[0] <= v[1] <= ... <= v[n-1] */
int bin( int x, int v[] , int n)
{
int low, high , mid;
low = 0;
high = n -1;
while( low <= high) {
printf("LOL\n");
mid = (low+high)/2;
if( x < v[mid])
high = mid + 1;
else if ( x> v[mid])
low = mid + 1;
else return mid;
}
return -1;
}
这是功能的文字: 二进制搜索首先将输入值x与数组v的中间元素进行比较。如果x小于 比中间值,搜索集中在表的下半部分,否则在上部 半。在任何一种情况下,下一步是将x与所选半部分的中间元素进行比较。 将范围分成两个的过程一直持续到找到值或范围为止 空。
为什么当我放入int v[4] nexts elements = { 2,3,4,5}
和for x = 2
时,循环会一直持续下去?
这是他们的错吗?
答案 0 :(得分:2)
您的代码有拼写错误。 而不是
if( x < v[mid])
high = mid + 1;
应该有
if( x < v[mid])
high = mid - 1;
如果将函数声明为
,也会更好int bin( int x, const int v[] , int n);
因为该算法不会更改数组本身,并且可以应用于常量数组。
考虑到标题bsearch
<stdlib.h>
答案 1 :(得分:0)
你在程序中犯了一个小错误......在第10行应该是
if(x<v[mid])
{
high=mid-1;
}
... 休息很好......这就是为什么它会导致一个永远的循环