二分法

二分法

二分搜索算法

  • 用于在有序集合中查找元素,时间复杂度为ologN
  • 二分具有二段性:给定条件可以将集合中元素分为两部分,一部分满足条件,一部分不满足条件 ---- # 步骤
  • 首先将(有序)集合分成两段,左边段[left,n-1]右边段[n,right]
  • 若mid落在左半段(<n)left=mid
  • 若mid落在右半段(>=n)right=mid
  • 然后else中left向右移动(加1),right向左移动(减1)
  • 若出现left=mid,计算mid要向上取整(加1)
  • 勤加练习,必能掌握 ### java实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    int arr[]=new int[]{1,2,3,4,5,6};
    int left=0,right=5;
    int left1=0,right1=5;
    int k=3;//要查找的值
    while(left<right) {//查找上界
    int mid=(left+right)>>1;
    if(arr[mid]>=k) {//界限可变
    right=mid;
    }
    else {
    left=mid+1;
    }
    }
    while(left1<right1) {//查找下界
    int mid=(left1+right1+1)>>1;
    if(arr[mid]<k) {
    left1=mid;
    }
    else {
    right1=mid-1;
    }
    }
    System.out.println(left+" "+left1);
1
2
3




二分法
https://fireworks258.github.io/2024/04/15/二分/
作者
Fireworks
发布于
2024年4月15日
许可协议