二分查找(c++)

概念

二分查找是分治算法的一种

题目练习

查找第一个大于等于target的数据

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int n,a[10010];

int erfen(int,int,int);
int main()
{
	
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	
	int target;
	cin>>target;
	cout<<erfen(target,0,n-1)<<endl;
	
	return 0;
}
int erfen(int target,int l,int r)
{
	int res = n-1;
	while(l<=r)
	{
		int mid = (l+r)/2;
		if(a[mid]<target) l = mid+1;
		else if(a[mid]>=target)
		{
			res = mid;
			r = mid-1;
		}
	}
	return res;
}

查找最后一个小于等于target的数据

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[10010];

int erfen(int,int,int);
int main()
{
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	int target;
	cin>>target;
	cout<<erfen(target,0,n-1);
	
	return 0;
}
int erfen(int target,int l,int r)
{
	int res = 0;
	while(l<=r)
	{
		int mid = (l+r)/2;
		if(a[mid]>target) r = mid-1;
		else if(a[mid]<=target)
		{
			res = mid;
			l = mid+1;
		}
	}
	return res;
}

平方根计算

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;


float erfen(float,float,float);

int main()
{
	
	float target;
	cin>>target;
	cout<<erfen(target,0.001,target);
	
	return 0;
}
float erfen(float target,float l,float r)
{
	float res = 0;
	while(l<=r)
	{
		float mid = (l+r)/2;
		int mid2 = mid/0.001;
		mid = mid2*0.001;
//		cout<<l<<" "<<mid<<" "<<r<<endl;
//		system("pause");
		if(mid*mid>target) r = mid-0.001;
		else if(mid*mid<target) l = mid+0.001;
		if(mid==res) return res;
		res = mid;
	}
	return res;
}
相关推荐
net3m332 小时前
单片机屏幕多级菜单系统之当前屏幕号+屏幕菜单当前深度 机制
c语言·c++·算法
你怎么知道我是队长2 小时前
C语言---文件读写
java·c语言·开发语言
陌路202 小时前
C++30 STL容器 -deque双端队列
开发语言·c++
AI视觉网奇2 小时前
ue 自己制作插件 c++
c++·ue5
Insight2 小时前
拒绝手动 Copy!一文吃透 PyTorch/NumPy 中的广播机制 (Broadcasting)
算法
xb11322 小时前
C#委托详解
开发语言·c#
brent4232 小时前
DAY50复习日
开发语言·python
CoovallyAIHub2 小时前
工业视觉检测:多模态大模型的诱惑
深度学习·算法·计算机视觉
木头程序员2 小时前
前端(包含HTML/JavaScript/DOM/BOM/jQuery)基础-暴力复习篇
开发语言·前端·javascript·ecmascript·es6·jquery·html5