二分查找可用于对有序的数列进行查找数组
二分查找思路:bash
二分查找代码测试
package BinartSearch;
public class BinarySearch {
public int binarySearch(int[] arr ,int k) {
int i=0;
int j=arr.length;
while(i<j) {
int m =i+(j-i)/2;//int m =(i+j)/2;可能致使溢出
if(k<arr[m]) {
j=m;
}
else if (k>arr[m]) {
i=m+1;
}
else {
return m;
}
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BinarySearch Binary =new BinarySearch();
System.out.println(Binary.binarySearch(new int[] {1,2,3,4,5}, 1));
System.out.println(Binary.binarySearch(new int[] {1}, 1));
System.out.println(Binary.binarySearch(new int[] {}, 1));
System.out.println(Binary.binarySearch(new int[] {1,2}, 1));
System.out.println(Binary.binarySearch(new int[] {1,2}, 2));
}
}
复制代码
分析ui
程序代码使用[i,j),半开半闭区间的好处spa
取中值使用到int m =i+(j-i)/2而不使用int m =(i+j)/2,是由于当i、j很大的时候会使得i+j溢出code
总结class
二分查找的实现整体来讲比较好理解,但要注意两个方面,一个边界值,另外一个是测试用例的选取。程序