Java中有自带Arrays 工具类
Arrays.sort(data);
int index = Arrays.binarySearch(data, 3);
直接调用函数即可。index即为数组下标值。
public class er{
public static void main(String[] args){
int[] arr = {0,1,2,3,4,5,6,7,8,9};
int a = 9;
//int m = BinSearch(arr,0,arr.length-1,a);
int m = BinSearch(arr,arr.length,a);
System.out.println(m);
}
/*
//递归
static int BinSearch(int Array[],int low,int high,int key)
{
if (low<=high)
{
int mid = (low+high)/2;
if(key == Array[mid])
return mid;
else if(key<Array[mid])
//移动low和high
return BinSearch(Array,low,mid-1,key);
else if(key>Array[mid])
return BinSearch(Array,mid+1,high,key);
}
return -1;
}
*/
/*
//递归
public static int BinSearch(int[] arr,int begin,int end,int a){
if (begin<=end)
{
int mid = (begin+end)/2;
if (arr[mid] == a){
//System.out.println("1");
return mid;
}
else if (arr[mid] < a){
return BinSearch(arr,mid+1,end,a);
//System.out.println("2 "+mid+" "+end);
}
else if (arr[mid] > a){
return BinSearch(arr,begin,mid-1,a);
//System.out.println("3"+begin+" "+mid);
}
}
return -1;
}
*/
//普通循环
public static int BinSearch(int[] a, int len, int goal)
{
int low = 0;
int high = len -1;
while (low <= high)
{
int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出
if (a[middle] == goal)
return middle;
//在左半边
else if (a[middle] > goal)
high = middle - 1;
//在右半边
else
low = middle + 1;
}
//没找到
return -1;
}
}