:
这个算法的错误在于, 在循环初始化的时候,初始化right=n,也就是采用的是左闭右开区间,而当满足array[middle] > v的条件是, v如果存在的话应该在[left, middle)区间中...下面给出两个算法, 分别是正确的左闭右闭和左闭右开区间算法,可以与上面的进行比较:
(下面这两个算法是正确的)
死循环
上面的情况还只是把边界的其中一个写错, 也就是右边的边界值写错, 如果两者同时都写错的话...首先, 如果序列中有多个相同的元素时,查找的时候不见得每次都会返回第一个元素的位置, 比如考虑一种极端情况:序列中都只有一个相同的元素,那么去查找这个元素时,显然返回的是中间元素的位置....= right)//这个循环维持的条件是left<right && array[left]<v<=array[right],所以到最后的时候,
8 {//如果可以找到目标,则只剩下两个数,并且满足...但是这个算法的还是不能很好的理解
可以用下面的算法,可以找出满足条件的数
1 int Bi_Search(int a[],int n,int b)//
2 {//返回等于b的第一个
3