折半查找:
二分思想
将区间的中间数据与目标进行比较,要求查找的序列是有序的
如果目标大于中值就舍弃较小的一半序列
如果目标小于中值就舍弃较大的一半序列
#include<bits/stdc++.h>
using namespace std;
//返回索引
int binary_search(int arr[],int l,int r,int value) {
int mid = (l + r) / 2;
if (arr[mid] == value)return mid;
//注意定界,否则就会越界
if (arr[mid] < value && mid + 1 <= r) return binary_search(arr, mid + 1, r, value);
else if (arr[mid] > value && mid - 1 >= l)return binary_search(arr, l, mid - 1, value);
return -1;
}
int main() {
int arr[] = {
1,2,3,4,5,6,7,8,9 };
cout << binary_search(arr,0,8,10);
cout << binary_search(arr,0,8,-1);
cout << binary_search(arr,0,8,4);
return 0;
//结果-1 -1 3
}
本来想写哈希表的,但是想了想,这东西考了也写不完。还是算了吧