3.0L2-C09-二分查找

题单介绍

## 课程教学目标: #### $1.手搓二分左边界模板;$ #### $2.手搓二分右边界模板;$ ```cpp /* lower_bound(begin, end, val) 在有序数组中连续地址[begin, end)中找到第1个位置并返回其地址,使得val插入在这个位置前面,有序 如果找不到这种元素则返回 插入之后依然有序的位置。 upper_bound(begin, end, val) 在有序数组中连续地址[begin, end)中找到最后一个位置+1并返回其地址,使得val插入在这个位置前面,有序 如果找不到这种元素则返回 插入之后依然有序的位置。 */ #include <algorithm> #include <iostream> using namespace std; int main() { int n = 10; int val = 2; int a[10]= {0,0,2,2,2,2,4,4,5}; printf("下标:"); for (int i=0; i<10; i++) printf("%d ", i); printf("\n数值:"); for (int i=0; i<10; i++) printf("%d ", a[i]); // //直接返回的是地址 cout << "\n\nlower_bound(begin, end, val):\n第1次出现的地址为:"; cout << lower_bound(a, a+n, val) << endl; //第1次出现的位置 cout << "数组下标为:"; cout << lower_bound(a, a+n, val) - a << endl; //计算位置编号 val = 3; cout << "如果没有则返回的位置是插入后依然有序的位置:"; cout << lower_bound(a, a+n, val) - a << endl; val = 2; cout << "\nupper_bound(begin, end, val):\n最后出现的位置+1的地址为:"; cout << upper_bound(a, a+n, val) << endl; cout << "数组下标为:"<<upper_bound(a, a+n, val)-a << endl; //6 , [gegin, end) #if 1 val = 3; cout << "如果没有则返回的位置是插入之后依然有序的位置:"; cout << upper_bound(a, a+n, val) - a << endl; #endif return 0; } ```

题目列表

  • 【二分】数的位置
  • 【深基13.例1】查找
  • 数的范围
  • A-B 数对
  • 跳跳!