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