1. 二分查找法代码实现:
1 // 二分查找法
2 // A[]为严格递增序列,left为二分下界,x为欲查询的数
3 // 二分区间为左闭右闭的[left, right], 传入的初值为[0, n-1]
4 int binarySearch(int A[], int left, int right, int x){
5 int mid;
6 while (left <= right){
7 mid = (left + right) / 2; // mid = left + (right - left) / 2;
8 if (A[mid] == x){
9 return mid;
10 }
11 else if (A[mid] > x){
12 right = mid - 1;
13 }
14 else if (A[mid] < x){
15 left = mid + 1;
16 }
17 }
18
19 return -1;
20 }
2. 二分法求序列中第一个大于等于x的元素的位置L
1 // 求序列中第一个大于等于x的元素的位置L
2 // 二分上下界为左闭右闭的[left, right], 传入的初值为[0, n]
3 int lower_bound(int A[], int left, int right, int x){
4 int mid;
5 while (left < right){
6 mid = (left + right) / 2;
7 if (A[mid] >= x){
8 right = mid;
9 }
10 else{
11 left = mid + 1;
12 }
13 }
14 return left; // 返回夹出来的位置
15 }
3. 二分法求序列中第一个大于x 的元素的位置R
1 int upper_bound(int A[], int left, int right, int x){
2 int mid;
3 while (left < right){
4 mid = (left + right) / 2;
5 if (A[mid] > x){
6 right = mid;
7 }
8 else{
9 left = mid + 1;
10 }
11 }
12 return left;
13 }
4. 二分法解决“寻找有序序列第一个满足某条件的元素的位置”问题的固定模板
1 // 二分区间为左闭右闭[left, right], 初值必须能覆盖解的所有取值
2 int solve(int left, int right){
3 int mid;
4 while (left < right){
5 mid = (left + right) / 2;
6 if (条件成立){
7 right = mid;
8 }
9 else{
10 left = mid + 1;
11 }
12 }
13
14 return left;
15 }
5. 二分法求根号2的近似值
1 double calSqrt(){
2 double left = 1, right = 2, mid; // [left, right] = [1, 2]
3 while (right - left > eps){
4 mid = (left + right) /2;
5 if (f(mid) > 2){
6 right = mid;
7 }
8 else{
9 left = mid;
10 }
11 }
12
13 return mid;
14 }
6. 二分法求某个单调函数根的近似值
1 // 利用二分法求单调函数的根
2 const double eps2 = 1e-5;
3 double f(double x){
4 return ...; // 写函数的表达式
5 }
6
7 double solve(double L, double R){
8 double left = L, right = R, mid;
9 while (right - left > eps2){
10 mid = (left + right) / 2;
11 if (f(mid) > 0){
12 right = mid;
13 }
14 else{
15 left = mid;
16 }
17 }
18 return mid;
19 }
7. 快速幂的递归写法(二分法实现)
1 // 快速幂的递归写法
2 typedef long long LL;
3 // a^b & m
4 LL binaryPow(LL a, LL b, LL m){
5 if (b == 0)
6 return 1;
7 if (b & 1){ // 如果b为奇数
8 return a * binaryPow(a, b - 1, m) % m;
9 }
10 else{
11 LL mu = binaryPow(a, b / 2, m);
12 return mu * mu % m;
13 }
14 }
来源:https://www.cnblogs.com/hi3254014978/p/12215149.html