二分查找的常识与相关的基础练习题

今天上课了,老师也是提到了二分算法,下面就由我来带给大家一道二分算法的常识和一道基础练习题。


1.二分查找的常识

二分查找主要是简化暴力枚举(即穷举法)的查找过程,比如说我们要在100亿里面找一个数,暴力枚举就会变得非常非常的慢,要一个一个的将其列举出来,每一个都要进行查找,最多要找100亿次,再继续寻找。而二分算法就只需要计算三十余次(预计是32~38次),就会简化大量的时间,从而达到高效的目的。

二分算法最根本的要求就是必须是升序,因为它是在通过大与小两个条件不断缩小查找范围,从而简化代码,乱序就不行了,它就无法进行查找了。


2.简单的例题

题目:给定一个有n(n<1000)位的升序数组,要求查找出此数组中的第k个数并输出。

输入:

第一行:一个正整数n。

第二行:一个升序数组。

第三行:要查找的第k个数。

输出:

一行,要求查找的第n个数。

输入样例:

10

1 2 3 4 5 6 7 8 9 10

6

输出样例:

6

上代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a[10005],k;
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	cin>>k;
	int left=0,right=n,mid;
	while(left<=right){
		mid=left+(right-left)/2;//更安全的折中取法
		if(a[k]>a[mid]) left=mid+1;
		else if(a[k]<a[mid]) right=mid-1;
		else{
			cout<<mid<<endl;
			return 0;
		}
	}
	return 0;
}

以上就是关于二分算法的常识和例题的代码了!希望大家多多支持,多多鼓励我,你们的每一个点赞都对我有很大的帮助!

如果有可以改进的地方,欢迎私信,欢迎评论!我会在第一时间答复!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值