折半查找(二分)(C++递归版本)

折半查找:

二分思想
将区间的中间数据与目标进行比较,要求查找的序列是有序的
如果目标大于中值就舍弃较小的一半序列
如果目标小于中值就舍弃较大的一半序列


#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
}

本来想写哈希表的,但是想了想,这东西考了也写不完。还是算了吧

Guess you like

Origin blog.csdn.net/blastospore/article/details/122109604