二分查找
########################################
二分查找,是一种算法,又称之为折半查找,对于待查找的序列要求必须是有序的。
步骤:每次取中间位置的值与待查找的值进行比较,如果中间位置的值比待查值大,则在前半部分循环这个查找过程;如果中间位置的值比待查值小,则在后半部分循环这个查找过程。一直查找到为止,否则序列中没有待查找的值。
比如给定一个数组 [] a={2,3,6,8,9,11,14};
假如我们找的是a[i]=8这个值的话,因为它在中间位置,就直接返回其数组的下标;
假如要找的是a[i]=3,则用中间位置的值(8)与待查值(3)进行比较,发现比中间值小,则在左边部分循环进行二分查找,找到值为3对应的位置。
假如要找的是a[i]=14,则用中间位置的值(8)与待查值(14)进行比较,发现比中间值大,则在右边部分循环进行二分查找,找到值为14对应的位置。
########################################
接下来看代码的具体实现:
1 public static int BinarySearch(int []array,int a){ 2 int lo=0; 3 int hi=array.length-1; 4 int mid; 5 while(lo<=hi){ 6 mid=(lo+hi)/2; //中间位置 7 if(array[mid]==a){ 8 return mid+1; 9 }else if(array[mid]<a){ //向右查找 10 lo=mid+1; 11 }else{ //向左查找 12 hi=mid-1; 13 } 14 } 15 return -1; 16 }