赞
踩
**概述:**二分在查找时用得比较多,复杂度为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 -----------*/
测试结果:
读者也可以自行输入几组数据测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。