c++二分查找實現(非遞歸和遞歸方式)


  • #include <iostream>  
  •   
  • using namespace std;  
  •   
  • /* 
  • *二分查找思想:1、數組從小到大排序;2、查找的key每次和中間數比較,如果key小於mid 
  • 查找mid左側的數組部分;如果key大於mid,則查找mid右側的數組部分;如果相等,則直接返回mid。 
  •  
  • 輸入:排序數組-array,數組大小-aSize,查找值-key 
  • 返回:返回數組中的相應位置,否則返回-1 
  • */  
  • //非遞歸查找  
  • int BinarySearch(int *array, int aSize, int key)  
  • {  
  •     if ( array == NULL || aSize == 0 )  
  •         return -1;  
  •     int low = 0;  
  •     int high = aSize - 1;  
  •     int mid = 0;  
  •   
  •     while ( low <= high )  
  •     {  
  •         mid = (low + high )/2;  
  •           
  •         if ( array[mid] < key)  
  •             low = mid + 1;  
  •         else if ( array[mid] > key )     
  •             high = mid - 1;  
  •         else  
  •             return mid;  
  •     }  
  •     return -1;  
  • }  
  • //遞歸  
  • int BinarySearchRecursive(int *array, int low, int high, int key)  
  • {  
  •     if ( low > high )  
  •         return -1;  
  •     int mid = ( low + high )/2;  
  •       
  •     if ( array[mid] == key )  
  •         return mid;  
  •     else if ( array[mid] < key )  
  •         return BinarySearchRecursive(array, mid+1, high, key);  
  •     else  
  •         return BinarySearchRecursive(array, low, mid-1, key);  
  • }  
  •   
  • int main()  
  • {  
  •     int array[10];  
  •     for (int i=0; i<10; i++)  
  •         array[i] = i;  
  •   
  •     cout<<"No recursive:"<<endl;  
  •     cout<<"position:"<<BinarySearch(array, 10, 6)<<endl;  
  •     cout<<"recursive:"<<endl;  
  •     cout<<"position:"<<BinarySearchRecursive(array, 0, 9, 6)<<endl;  
  •   
  •     return 0;  
  • }  

  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM