二分查找


【二分查找】
ide

前提:在一個已序的空間中查找spa

注意:查找邊界條件orm


狀況一:左閉右開 【 ),右邊界始終沒法取到it

假如前開後閉空間 【left,right),好比int array[10]={0,1,2,3,4,5,6,7,8,9};【0,10)class

int BinarySearch (int a[],int size,int data)di

{view

   int left=0;vi

   int right=size;while

   int mid=0; co

   while(left<right)//注意此處不能去等號

     {

        mid=left + (right-left)/2;

        if(data<a[mid])

           {

             right=mid;

           }

        else if(data>a[mid])

           {

             left=mid+1;

           }

        else

           {

             return mid;

           }

     }

     return -1;

}

假如查找3

1 2 3 4 5 6 7 8 9

第一次 【1,9) mid=4 a[4]>3 縮小右邊界 [0,4)

        即直接right=mid;

第二次 【0,4) mid=2 a[2]==3 退出

假如找9

第一次 【0,9) mid=4 a[4]<9 改變左邊界[5,9)

第二次 【5,9)mid=9 a[7]<9 改變左邊界[8,9)

第三次 【8,9)mid=8 a[8]==9 退出


狀況二:左閉右閉 右邊界能夠取到

假如前開後閉空間 【left,right】,好比int array[10]={0,1,2,3,4,5,6,7,8,9};【0,9】

int BinarySearch (int a[],int size,int data)

{

   int left=0;

   int right=size;

   int mid=0; 

   while(left<right)//注意必須加=號,好比查找最後一個元素

     {

        mid=left + (right-left)/2;

        if(data<a[mid])

           {

             right=mid-1;

           }

        else if(data>a[mid])

           {

             left=mid+1;

           }

        else

           {

             return mid;

           }

     }

     return -1;

}

假如查找4

1 2 3 4 5 6 7 8 9

第一次 [0,8] mid =4 a[4]>4  縮小右邊界[0,3]

第二次 [0,3] mid =1 a[1]<4  改變左邊界[2,3]

第三次 [2,3] mid=2  a[2]<4  改變左邊界[3,3]

第四次 [3,3] mid=3  

相關文章
相關標籤/搜索