栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【算法分析与设计】7-2 改写二分搜索算法 (20 分)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【算法分析与设计】7-2 改写二分搜索算法 (20 分)

#include
using namespace std;


void binarySearch(int a[], int left, int right, int aim) {
	int i = 0;
	int j = 0;
	while (left <= right) {
		int middle = (left + right)/2;
		
		//搜索值与中间值相等 
		if(aim == a[middle]) 
		{
			i = j = middle;
			cout << i << " " << j << endl;
			break;
		}
		
		//搜索值大于中间值 
		else if(aim > a[middle]) 
		{
			//x不存在且大于全部数 
			if(middle == right-1 && aim > a[right])
			{
				cout << right << " " << right + 1;
				break;
			}
			//x等于下一个数 
			if(aim == a[middle + 1])	i = j = middle + 1;
			
			//x在中间数与下一个数之间 
			else if(aim < a[middle + 1])
			{
				i = middle;
				j = middle + 1;
			}
			else 
			{
				left = middle + 1;
				continue;
			}
			cout << i << " " << j << endl;
			break;
		}
		
		//搜索值小于中间值 
		else 
		{
			//x不存在且小于全部数 
			if(middle == 0 && aim < a[0]){
				cout << -1 << " " << 0;
				break;
			}
			//x等于上一个数 
			if(aim == a[middle-1])	i = j = middle - 1;
			
			//x在上一个数与中间数之间 
			else if(aim > a[middle - 1])
			{
				i = middle - 1;
				j = middle;
			}
			else
			{
				right = middle;
				continue;
			}
			cout << i << " " << j << endl;
			break;
		}

	}
}


int main() {
	int a[1001];
	int n, aim;
	cin >> n;
	cin >> aim;
	
	for(int i=0; i> a[i];
	}
	binarySearch(a, 0, n-1, aim);
	return 0;
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号