Java二分查找
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; } }