二分查找为什么high要加1

版权声明:想不开 想不开 想不开 https://blog.csdn.net/zuoside__lord/article/details/88838048

二分查找很简单,可是之前每次写代码 我都会把hight直接=mid,left=mid 然后就错了。。。。

二分查找适合有序序列(所以 感觉也没有用 )

#include<stdio.h>
int mid_search(int *a,int v,int len)
{
        int right=len-1;
        int left=0;
        int mid=(right+left)/2;
        while(left<len&&right>=0)
        {
                if(v>a[mid])
                {
                        left=mid+1;
                        mid=(left+right)/2;
                }
                else if(v==a[mid])
                {
                        printf("find! value at:%d",mid);
                        return 1;
                }
                else
                {
                        right=mid-1;
                        mid=(left+right)/2;
                }
        }
        return 0;
}
int main()
{
        int a[]={1,2,3,4,5,6,7,8};
        int ret=mid_search(a,5,8);
        printf("%d\n",ret);
}

。。。刚刚发现如果不mid+1 mid-1 会死循环,特别是如果是求末尾的值它left right会一直重复,而且求不存在的值也会死循环 不造为什么,+1 -1从我这个代码角度也勉强找到理由吧,因为=mid的时候已经比较了所以不需要比较了,,,

可以去学AVL B+ B-了,哇喔。-----树章节最喜欢哈夫曼,其他无感。就是听着 很高大上。。

猜你喜欢

转载自blog.csdn.net/zuoside__lord/article/details/88838048