二分查找实现 C++

二分查找递归实现

# include<iostream>
using namespace std;
int binary_search(int arr[],int low , int high, int key)
{
	""" 通过递归二分查找 查找元素"""
	if(low<=high){
		int mid = low + (high-low)/2;
		//若元素在中间 
		if(arr[mid] == key)
			return mid;
		// 若元素比中间的数小 那么它只可能在左边的子数组中 则可另high = mid -1
		elif (arr[mid] > key)
			return binary_search(arr,low,mid-1,key);
        //否则 只可能在右边的子数组汇总 则可令low = mid+1
        return binary_search(arr,mid+1,high,key);  
	}
	// 该元素不在数组中
	return -1;
}
int main()
{
	int arr[] = { 2, 3, 4, 10, 40 };
	int x = 10;
	int n = sizeof(arr) / sizeof(arr[0]);
	int result = binary_search(arr, 0, n - 1, x);
	(result == -1) ? cout << "Element is not present in array"
		: cout << "Element is present at index " << result;
	return 0;
}

二分查找迭代实现

#include<iostream>
using namespace std;
int binary_search(int arr[], int low, int high, int key)
{
	//查找某元素是否存在于数组中 若存在,则返回下标;否则返回-1
	while (low <= high) {
		// 检查key是否在中间
		int mid = low + (high - low) / 2;
		if (arr[mid] == key)
			return mid;
		// 如果x大于arr[mid] 则low = mid+1;否则high=mid-1
		if (arr[mid] < key)
			low = mid + 1;
		else
			high = mid - 1;
	}
	return -1;
}
int main()
{
	int arr[] = { 2, 3, 4, 10, 40 };
	int x = 10;
	int n = sizeof(arr) / sizeof(arr[0]);
	int result = binary_search(arr, 0, n - 1, x);
	(result == -1) ? cout << "Element is not present in array"
		: cout << "Element is present at index " << result;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值