zoukankan      html  css  js  c++  java
  • 【算法】二分搜索方法

      二分搜索法运用了分治策略。给定已经排好序的n个元素,在这个n个元素中查找一个特定的元素x。

            二分搜索法的基本思想是将n个元素分成个数大致相同的两半,取arr[n/2]与x进行比较。如果x=arr[/2],则找到x,算法终止。如果x<arr[n/2],则只要在数组a的左半部分继续搜索x。如果x>arr[a/2],则只要在数组arr的右半部分继续搜索x。

    java实现代码: 

    1.  
      public static void main(String[] args) {
    2.  
      int[] arr = {2, 7, 12, 15, 17, 21, 33, 36, 45, 65, 77, 79, 90};
    3.  
      System.out.println(binarySearch(arr, 79));
    4.  
      }
    5.  
       
    6.  
      public static int binarySearch(int[] arr, int x) {
    7.  
       
    8.  
      int left = 0; //左边界
    9.  
      int right = arr.length - 1; //右边界
    10.  
      while (left <= right) {
    11.  
      int middle = (left + right) / 2; //取中
    12.  
      if (x == arr[middle])
    13.  
      return middle;
    14.  
      if (x > arr[middle])
    15.  
      left = middle + 1;
    16.  
      else
    17.  
      right = middle - 1;
    18.  
      }
    19.  
      return -1;
    20.  
      }

    图解一下主要运行步骤:

    • 数组:arr ,红色元素79是我们要查找的元素

          

    • 循环第一次:middle是我们的二分查找指针,这次指针指向了中间,将数组分为两半

          

         未找到,79比33大。接下来left边界向右➡️移动至middle+1的位置,指针middle重新计算

    • 循环第二次

          

        未找到,79比65大。接下来left边界向右➡️移动至middle+1的位置,指针middle重新计算

    • 循环第三次

         

        成功 找到目标元素。

    ---------------------------------------------------------------------

    这是数组内查找后边大元素的例子,反之查找前边小元素也是同理,right边界向左⬅️移动至middle+1的位置

    参考文本
    学习视频资料:http://www.makeru.com.cn/live/1392_1164.html?s=143793

  • 相关阅读:
    Power OJ 2790.GAUSS 2014(KMP或AC自动机+矩阵快速幂)
    PowerOJ 2789 上决╇ф的战争 (KMP)
    牛客网 The K-th Largest Interval (二分+尺取)
    牛客网 wyh的天鹅 (权值线段树)
    图像边缘计算 canny算子
    图像边缘检测 拉普拉斯算子
    图像边缘检测,sobel,scharr
    卷积的边缘像素填充
    图像的二值化
    图像的上采样和下采样
  • 原文地址:https://www.cnblogs.com/jinwenyi/p/13954513.html
Copyright © 2011-2022 走看看