当前位置:   article > 正文

ACM算法入门——二分查找_acm简单二分

acm简单二分

二分查找

**概述:**二分在查找时用得比较多,复杂度为O(logn),使用二分的前提要求数据按顺序排列(如:1 2 2 2 4 5 6 7),如果数据不顺序,需要对数据进行排序,排序复杂度为O(n*logn)。

代码演示:

#include <cstdio>
#include <iostream>
#include <cstring> //memset函数头文件
#include <algorithm> //排序函数sort所在的头文件
using namespace std;
const int MaxN = 1e5 + 5;
#define debug(x) cout << #x << "=" << x << endl;

int main(){
	int n, m, t;
	int a[MaxN];
	cin >> t;
	while(t--){
		memset(a, 0, sizeof(a)); //清空数组
		cin >> n >> m;
		for (int i = 1; i <= n; i++) cin >> a[i];  // 输入
		
		sort(a + 1, a + 1 + n); //非递减排序
		
		int l = 1, r = n;
		int ans = 0;
		
		// 二分
		while(l < r) { 
			int mid = (l+r) / 2;
			if(a[mid] > m){
				r = mid;
				if(a[mid] == m) ans++;
			}
			else l = mid + 1;
		}
		
		cout << ans << endl;
	}
	return 0;
}

/*---------
测试数据:
2
10 2
50 2 3 5 46 9 100 2 5 89
5 5
1 2 0 4 3
-----------*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

测试结果:
这里写图片描述
读者也可以自行输入几组数据测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/620768
推荐阅读
相关标签
  

闽ICP备14008679号