public class Test { public static void main(String[] args) { int[]a={1,5,8,9,11,12,56,89}; int i = binarySearch(a, 56); System.out.println(i); } /** * 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置 的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小, 则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。 * @param arr * @param b * @return */ public static int binarySearch(int[]arr,int b){ if(null==arr || arr.length==0){ return -1; } int leftIndex=0;//查找区间的左边索引 int rightIndex=arr.length-1;//查找区间的右边索引 int mid=0;//区间的中间索引 while (leftIndex<=rightIndex){ //当左边的索引小于等于右边的索引时,可以继续取中间值 mid=(leftIndex+rightIndex)/2;//中间索引值 if(arr[mid]==b){ //如果中间索引所在的数据与需要查找的数据相等,则返回索引值 return mid; } if(arr[mid]>b){//b在左 rightIndex=mid-1;//如果需要查找的值在左边区间,则右边的索引要改为中间索引mid,又因为上一步知道arr[mid]!=b,所以要用mid-1作为右区间索引 }else { leftIndex=mid+1; //b在右边,同理所以mid+1 } } return -1;//找不到时 } }