• Binary Search



    简单的二分搜索:在一个非递减序整型数组中搜索值value,返回其所在下标

    最普通的二分搜索
     1 static int BinarySearch(int[] arr, int value)
     2 {
     3     int l = 0;
     4     int r = arr.Length - 1;
     5 
     6     while (l <= r)
     7     {
     8         // 防溢出,若使用 (l + r) / 2
     9         // 当l 和 r 都很大时可能会溢出
    10         int m = l + (r - l) / 2;
    11 
    12         if (arr[m] < value)
    13             l = m + 1;
    14         if (arr[m] == value)
    15             return m;
    16         if (arr[m] > value)
    17             r = m - 1;
    18     }
    19 
    20     return -1;// 未找到
    21 }
    22 
    View Code

    有重复元素,返回下标最小的

    1 static int BinarySearch2(int[] arr, int value)
     2 {
     3     int l = 0;
     4     int r = arr.Length - 1;
     5 
     6     while (l <= r)
     7     {
     8         int m = l + (r - l) / 2;
     9 
    10         if (arr[m] < value)
    11             l = m + 1;
    12         if (arr[m] == value)
    13         {
    14             // 如果左边有相等元素,且下标在范围内,继续比较
    15             if (m - 1 >= 0 && arr[m - 1] == value)
    16                 r = m - 1;
    17             else //否则直接返回
    18                 return m;
    19         }
    20         if (arr[m] > value)
    21             r = m - 1;
    22     }
    23 
    24     return -1;
    25 }
    26 
  • 相关阅读:
    Vue中computed和watch的区别
    JS基础语法
    JDBC
    表设计
    查询语句
    反射
    网络端
    多线程
    HashMap
    IO
  • 原文地址:https://www.cnblogs.com/beipiaoboy/p/3251041.html
Copyright © 2020-2023  润新知