二分查找可用於對有序的數列進行查找數組
二分查找思路: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
二分查找的實現整體來講比較好理解,但要注意兩個方面,一個邊界值,另外一個是測試用例的選取。程序