二分查找(折半查找)

 1 package cn.stringbuffer.com;
 2 
 3 public class ErFenselect {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         // 定义一个数组元素
 8         int[] arr = { 11, 22, 33, 44, 55, 66, 77, };
 9         int index = getindex(arr, 33);
10         System.out.println(index);
11         // 测试数组元素中如果没有这个元素
12         int index2 = getindex(arr, 333);
13         System.out.println(index2);
14 
15     }
16 
17     public static int getindex(int[] arr, int value) {
18         // 定义最大索引等于数组长度-1
19         int max = arr.length - 1;
20         // 定义最小索引为0开始
21         int min = 0;
22         // 计算中间索引
23         int mid = (max + min) / 2;
24         while (arr[mid] != value) {// 当中间索引的值不等于传进来的参数
25             if (arr[mid] > value) {// 如果中间索引大于传进来的参数
26                 max = mid - 1;// 最大索引值等于中间索引-1
27             } else if (arr[mid] < value) {// 如果中间值小于传进来的参数 向右边寻找
28                 min = mid + 1;// 最小值等于中间值+1,向右边寻找
29             }
30             if (min > max) {// 有的时候可能传入的数字不存在数组元素中,当mid的值都超过最大的索引值的时候
31                 return -1;// 例如: int index2=getindex(arr, 333);
32 
33             }
34             mid = (max + min) / 2;// 然后依次循环
35         }
36         return mid;// 返回mid的值
37     }
38 
39 }

猜你喜欢

转载自www.cnblogs.com/yschung/p/9274709.html