二分查找

Posted 凯玲之恋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。

二分查找

     二分查找 :查找元素对应的索引

     前提:数组元素有序

折半查找:

图解:

 

代码实现

案例:

  1. public class Demo2_Array {
  2.    public static void main(String[] args) {
  3.       int[] arr = {11,22,33,44,55,66,77};
  4.       System.out.println(getIndex(arr, 22));
  5.       System.out.println(getIndex(arr, 66));
  6.       System.out.println(getIndex(arr, 88));
  7.    }
  8.   public static int getIndex(int[] arr, int value) {
  9.       int min = 0;
  10.       int max = arr.length - 1;
  11.       int mid = (min + max) / 2;
  12.  
  13.       while(arr[mid] != value) { //当中间值不等于要找的值,就开始循环查找
  14.          if(arr[mid] < value) { //当中间值小于了要找的值
  15.             min = mid + 1; //最小的索引改变
  16.          }else if (arr[mid] > value){ //当中间值大于了要找的值
  17.             max = mid - 1; //最大的索引改变
  18.          }
  19.  
  20.          mid = (min + max) / 2; //无论最大还是最小改变,中间索引都会随之改变
  21.  
  22.          if(min > max) { //如果最小索引大于了最大索引,就没有查找的可能性了
  23.             return -1; //返回-1
  24.          }
  25.       }
  26.       return mid;
  27.    }
  28. }

 

注意事项

    如果数组无序,就不能使用二分查找。

    因为如果你排序了,但是你排序的时候已经改变了我最原始的元素索引。

 

以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章

异序二分查找 二分查找方程根 二分查找重复元素最后一个

每周算法小知识之二分查找

查找算法之“二分查找”

java 二分查找法

hiho36 二分·二分查找二分查找

二分查找