二分查找(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;
}
相关推荐
白杨尚青9 分钟前
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)
java·开发语言·c++·笔记·stl
FlightYe13 分钟前
视界原理之2D视频(二):视频文件里有什么
android·linux·网络·c++·ffmpeg·音视频·aac
可乐鸡翅yeah_14 分钟前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
Tanshu_API君17 分钟前
API 聚合平台选型指南:从参数拆解到生产落地的十个评估维度
开发语言·api
Chen—LSN18 分钟前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
狗凯之家源码网21 分钟前
PHP 开源 IM 即时通讯系统效果实测与功能展示
开发语言·开源·php
anew___22 分钟前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法
辛苦才能38 分钟前
C++ map/set 深度解析:从关联式容器的本质到 operator[] 的三重身份
开发语言·c++
Chen—LSN1 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
纪念 2291 小时前
C++类和对象(最终篇)
开发语言·c++