/**
* 二分查询
* @author ma
* @version V1.0
*/
public class ArrayHalfSort {
/*
* 二分查询:
* 就是用数组中的中间的一个元素和转入的变量比较,如果小于中间的元素,则以中间元素地前一个元素作为最的一个元素,重复比较,反之 亦然
* 注册:
* 1.数组为有序数组
* 2.注册索引越界
*/
public static void main(String[] args) {
int[] arr = {11,22,33,44,55,66,77,88,99,100};
arrayHalfFind(arr,11);
System.out.println(ArrayHalfFind(arr,556));
}
/**
* 二分法查找整数在数组中的索引
* @param arr 要查找的数组
* @param value 要查找的数字
* @return 如果数字在数组中,则返回索引值;反之返回-1
*/
public static int arrayHalfFind(int[] arr, int value) {
//数组的最大索引
int max = arr.length-1;
//最小索引
int min = 0;
//定义 一个int mid 来接收数组索引的二分之一值
int mid = (min + max)/2;
//遍历数组
while(arr[mid] != value){
//如果中间的值arr[mid]大于传入 的值value,则max = mid -1;如果中间的值arr[mid]小于传入 的值value,则min = mid +1;
if(arr[mid] > value){
max = mid -1;
}else if(arr[mid] < value ){
min = mid + 1;
}
//如果min > max ,则数组中没有该数,返回-1
if(min > max){
return -1;
}
//得到新的中间索引
mid = (min + max)/2;
}
return mid;
}
}