借鉴于《数据结构-严蔚敏》,《labuladong 算法小抄》
后者给出的代码更为完善。
一共三种二分查找法,后两者针对有重复值的情况。
1 简单二分查找
2 左边界二分查找
3 有边界二分查找
1.简单二分查找法测试代码
import java.util.Arrays;
import java.util.Random;
public class DemoBinarySearch {
public static void main(String[] args){
Random rd = new Random();
int[] array = {12,3,44,23,-3,-67,200,18,15};
Arrays.sort(array);
System.out.println(array.length);//元素总数
System.out.println(Arrays.toString(array));//有序列表
System.out.println(BinarySearch(array,15));//查到到地元素下标
}
/**
*二分查找法
* @param a 待查找地有序列表
* @param key 要查找的值
* @return 找到则返回 key 的下标,找不到则返回-1
*/
public static int BinarySearch(int[] a,int key){
if(null==a||key<a[0]||key>a[a.length-1]) return -1;
int low=0;
int high=a.length-1;
while(low<=high){
int mid=low+(high-low)/2; //防止两个超大值相加溢出
if(key==a[mid]) return mid;
else if(key<a[mid]) high=mid-1;
else if(key>a[mid]) low=mid+1;
}
return -1;
}
}