码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2017-02-19 10:18:18      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:有序   back   oid   min   class   int   改变   round   sys   

二分查找

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

     前提:数组元素有序

折半查找:

图解:

技术分享

 

代码实现

案例:

  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. }

 

注意事项

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

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

 

二分查找

标签:有序   back   oid   min   class   int   改变   round   sys   

原文地址:http://www.cnblogs.com/wk520hll/p/6414600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!