二分查找


【二分查找】

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

注意:查找邊界條件


情況一:左閉右開 【 ),右邊界始終無法取到

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

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;

           }

        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  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章