1. 程式人生 > >二分查詢法示例

二分查詢法示例

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 <iostream>
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<<shang<<","<<zhong<<","<<xia<<endl;
       if(num =a[zhong])
       {
           printf("找到了");
           break;//跳出迴圈
       }
       else if(num>a[zhong])
       {
          shang=zhong +1; 
       }else
       {
           xia =zhong -1;
       }
    }
   return 0;
}