二分查找法和使用二分法查找的注意事项

使用二分法查找的必要条件:

1、数组有序

2、注意数据类型是有范围的,不要溢出。

3、采用L+(R-L)/2表达式更合适

4、注意:start = mid +1 和 end=mid -1,防止死循环

5、数据量不可过大

 

 

1024个人,有一个人有艾滋病。需要血液检测。
如何快速找出这个人。
所有人血液都采取过来。把512个人血液混合起来
512 512  1次淘汰512个人
256 256  2次淘汰256个人
128 128  3次淘汰128个人
64
32
16
4
2
1

 

0            shang

1

2

。。。     zhong

1021

1022

1023       xia

 

 

#include 
using namespace std;

int main()
{
   int a[128];
    for(int i=0;i<128;i++)
    { 
      a[i]=i;
    }
    printf("%p\n",a);
    int num=333;
    int shang = 0;
    int xia =1023;
    int zhong;
    while(shang < xia )
    {
        zhong =(shang +xia)/2;//取一个中间值
       cout<a[zhong])
       {
          shang=zhong +1; 
       }else
       {
           xia =zhong -1;
       }
    }
   return 0;
}

 

 

int binary_find(int *a,int n,int key)
{
     int start =0;
     int last = n-1;
     int middle =(start+last)/2;
     while(startkey)
         {
             last = middle-1;
         }
         else if(a[middle]>key;
   int n=binary_find(arr,10,key);
   if(n != -1)
   cout<

 

你可能感兴趣的:(c++,数据结构和算法)