#include <iostream> #include <algorithm> using namespace std; // 非递归 template<typename T> int binarySearch(T arr[], int n, T target) { int l = 0, r = n - 1; while(l <= r) { int mid = l + (r - l) / 2; if(arr[mid] == target) { return mid + 1; } else if(arr[mid] < target) { l = mid + 1; } else { r = mid - 1; } } return -1; } // 递归 template<typename T> int _binarySearch2(T arr[], int l, int r, T target) { if(l > r) return -1; int mid = l + (r - l) / 2; if(arr[mid] == target) return mid + 1; else if(arr[mid] < target) return _binarySearch2(arr, mid + 1, r, target); else return _binarySearch2(arr, l, mid - 1, target); } template<typename T> int binarySearch2(T arr[], int n, T target) { return _binarySearch2(arr, 0, n - 1, target); } int main() { int arr[] = {1,6,3,9,4}; sort(arr, arr + 5); // 对于有序数列才能使用二分查找法 int pos; pos = binarySearch2(arr, 5, 6); cout << pos << endl; return 0; } /* 4 */