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 }