二分查找(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;
}
相关推荐
橙子也要努力变强12 分钟前
信号捕捉底层机制-机理篇2
linux·服务器·c++
foundbug99929 分钟前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab
盐焗鹌鹑蛋32 分钟前
【C++】stack和queue类
c++
XDH_CS34 分钟前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
小短腿的代码世界1 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
小康小小涵1 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python
lzjava20241 小时前
Python的函数
开发语言·python
郝学胜-神的一滴1 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal
lzh200409192 小时前
深入理解进程:从PCB内核结构到写时拷贝的底层实战
linux·c++
Awesome Baron2 小时前
skill、tool calling、MCP区别
开发语言·人工智能·python