二分查找写法
程序员文章站
2022-04-07 19:16:49
...
二分查找写的很头疼,准备固定一下自己的写法。
二分可以用在以下的几个情况:
1.寻找数组中存在的值的坐标;
2.寻找数组中>=value的最小坐标,也即寻找数组中小于value的数量
3.寻找数组中>value的最小坐标,也即寻找数组中小于等于value的数量
其他的情况碰到了再说 - -
1可与2合并,加以判断,不存在则返回-1,重点是2与3
#include <iostream>
using namespace std;
//2.寻找数组中>=value的最小坐标,也即寻找数组中小于value的数量
int bisearch(int v[11], int t) {
int l = 0;
int r = 11;
while (l < r) {
int m = l + (r - l) / 2;
if (v[m] <t) {
l = m+1;
} else {
r = m;
}
cout<<"l:"<<l<<" "<<"r:"<<r<<" "<<"m:"<<m<<endl;
}
return l;
}
//3.寻找数组中>value的最小坐标,也即寻找数组中小于等于value的数量
int bisearch2(int v[11], int t) {
int l = 0;
int r = 11;
while (l < r) {
int m = l + (r - l) / 2;
if (v[m]<=t) {
l = m+1;
} else {
r = m;
}
cout<<"l:"<<l<<" "<<"r:"<<r<<" "<<"m:"<<m<<endl;
}
return l;
}
int main()
{
int a[11]={1,2,2,2,3,3,3,3,3,10,11};
int bbb=bisearch2(a,2);
cout<<bbb;
}
书写的原则是,我们搜寻的区间是[left,right) 返回的是我们的left,每次mid更新注意防止溢出,循环条件是left<right。
上一篇: 520最实用的两个Python表白程序
下一篇: 基于VueJs实现的井字棋小游戏