今天上课了,老师也是提到了二分算法,下面就由我来带给大家一道二分算法的常识和一道基础练习题。
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;
}
以上就是关于二分算法的常识和例题的代码了!希望大家多多支持,多多鼓励我,你们的每一个点赞都对我有很大的帮助!
如果有可以改进的地方,欢迎私信,欢迎评论!我会在第一时间答复!