第3.3章书k& r中的背景问题

时间:2014-09-21 19:52:54

标签: c

书中给我的功能----

/* 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时,循环会一直持续下去?

这是他们的错吗?

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

中声明了标准C函数<stdlib.h>

答案 1 :(得分:0)

你在程序中犯了一个小错误......在第10行应该是

if(x<v[mid])
{
   high=mid-1;
}

... 休息很好......这就是为什么它会导致一个永远的循环