二分查找法中 high=mid-1或low=mid+1其中的加一或者减一是为什么出现的?

1个回答

  • 二分查找的基本思想是:首先确定待查记录所在的范围(区域).假设用变量low和high分别表示当前查找区域的首尾下标.将待查关键字k和该区域的中间元素,其下标为mid=(low+high)/2的关键字进行比较.比较的结果有如下三种情况:

    (1)k==A[mid].key:查找成功,返回mid的值.

    (2)kA[mid].key:说明元素只可能在右边区域(下标从mid+1到high).因此应在此区域继续取中间位置记录的关键字进行比较.

    int BinSearch(SeqList A[],int n,KeyType k)

    { int low=0,high=n-1,mid;

    while(lowk) high=mid-1;

    else low=mid+1;

    }

    return -1;

    }

    从 high=mid-1或low=mid+1拆分进入下一个循环时减半