版权声明:想不开 想不开 想不开 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-了,哇喔。-----树章节最喜欢哈夫曼,其他无感。就是听着 很高大上。。