二分查找C++

时间:2023-03-09 23:01:13
二分查找C++
#include <iostream>
using namespace std;

//二分查找:每次都从中间位置寻找,如果找到了就返回,如果没找到,
//则分两种情况:
//(1)中间元素比目标大,则继续往左边的那段二分查找
//(2)中间元素比目标小,则继续往右边的那段二分查找
//递归下去,一旦找到元素就停止递归返回目标所在位置;当left>right时跳出递归
//时间复杂度为O(logn)

//还有一种查找算法就是顺序查找,就是从第一个元素到最后一个元素都遍历一遍,逐一跟目标比较是否相等 

//二分查找-递归实现-要求序列已经从小到大排好序
int binary_search(int array[],int left,int right,int key)
{
	if(left > right)//递归结束
		return -1;//找不到
	if(left == right)
	{
		if(array[left] == key)
			return left;
		else
			return -1;//找不到
	}
	int mid = (left + right) / 2;
	if(array[mid] == key)
		return mid;
	else if(array[mid] > key)
		return binary_search(array,left,mid-1,key);
	else if(array[mid] < key)
		return binary_search(array,mid+1,right,key);
}

//非递归实现
//int binary_search(int array[],int left,int right,int key)
//{
//	int mid;
//	while(left <= right)
//	{
//		mid = (left + right) / 2;
//		if(array[mid] == key)
//			return mid;
//		else if(array[mid] > key)
//			right = mid - 1;
//		else if(array[mid] < key)
//			left = mid + 1;
//	}
//	return -1;//没找到返回-1
//}

int main()
{
	int array[6] = {1,2,3,4,5,6};
	int position = binary_search(array,0,5,3);
	cout<<"4 locates on index "<<position<<endl;
	return 0;
}