2
数据量比较大时,如果需要查找数据,可以使用二分法
可以提高效率
例题
源代码
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int n, k, a[100005], b[100005], shu, s1, s2, gs, to; 6 int main() 7 { 8 scanf("%d%d", &n, &k);//n个人获得科技创新奖,m个人获得特殊贡献奖 9 for (int i = 1; i <= n; i++)scanf("%d", &a[i]);//科技创新奖的人的编号 10 for (int i = 1; i <= k; i++)scanf("%d", &b[i]);//特殊贡献奖的人的编号 11 sort(b + 1, b + 1 + k);//用特殊贡献奖的人的编号排序 12 for (int i = 1; i <= n; i++)//用科技创新奖的人的编号去寻找特殊贡献奖的人的编号有无相同 13 { 14 int low = 1, high = k; 15 while (low <= high)//二分,看看有无相同 16 { 17 int mid = (low + high) / 2;//中间值 18 if (b[mid] == a[i])//有无相同? 19 { 20 cout << a[i] << " "; 21 break; 22 } 23 else if (b[mid] < a[i])low = mid + 1;//在右区间找 24 else high = mid - 1;//在左区间找 25 } 26 } 27 return 0; 28 }
感悟:要处理的数据量比较大,同时需要进行查找等操作,用二分效率比较高
(二分的代码)!!!!!!!!!!!!!!!