二分法查找數組


  如果想要通過二分法查找數組中的某一個特定的值,該數組一定是有序數組,即如果一個無序數組想要利用二分法查找數組中的某一個特定的值,需要先將數組排序,然后再用二分法進行查找。二分法進行查找數組主要有兩種方式,第一種是利用地遞歸實現二分查找,另一種是利用非遞歸即循環的方式實現二分查找。具體的代碼實現如下:

  遞歸方法:

#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdio>
#include <algorithm>

using namespace std;


int searchBinary(int s,int a[], int low, int high){
    if(low > high){
        return -1;
    }else {
        int mid = (low + high)/2;
        if(s == a[mid]){
            return mid;
        }else if (s < a[mid]){
            return searchBinary(s,a,low,mid-1);
        }else {
            return searchBinary(s,a,mid + 1,high);
        }
    }

}


int main()
{
    int arr[] = {0,1,2,3,4,5,6,7,8,9,10};
    int index = searchBinary(2,arr,0,10);
    cout << index << endl;

}

  非遞歸方法:

#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdio>
#include <algorithm>

using namespace std;


/*int searchBinary(int s,int a[], int low, int high){
    if(low > high){
        return -1;
    }else {
        int mid = (low + high)/2;
        if(s == a[mid]){
            return mid;
        }else if (s < a[mid]){
            return searchBinary(s,a,low,mid-1);
        }else {
            return searchBinary(s,a,mid + 1,high);
        }
    }

}


int main()
{
    int arr[] = {0,1,2,3,4,5,6,7,8,9,10};
    int index = searchBinary(2,arr,0,10);
    cout << index << endl;

}*/
int BinSearch(int a[], int n, int key){
    int low = 0;
    int high = n - 1;
    int mid;
     while (low <= high){
        mid = (low + high)/2;
        if(key == a[mid]){
            return mid;
        }else if ( key < a[mid]){
            high = mid - 1;
        } else{
            low = mid + 1;
        }
     }
     return -1;
}

int main(){
    int arr[] = {0,1,2,3,4,5,6,7,8,9,10};
    int index = BinSearch(arr,11,2);
    cout << index << endl;
}

 


免責聲明!

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



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