JavaSE語言基礎之數組二分法查找
阿新 • • 發佈:2018-07-14
javase 情況 無法找到 成功 span 基礎 break println p s
一.概念:
算法:當數據量很大適宜采用該方法。采用二分法查找時,數據需是排好序的。 基本思想:假設數據是按升序排序的,對於給定值key,從序列的中間位置k開始比較, 如果當前位置arr[k]值等於key,則查找成功; 若key小於當前位置值arr[k],則在數列的前半段中查找,arr[low,mid-1]; 若key大於當前位置值arr[k],則在數列的後半段中繼續查找arr[mid+1,high], 直到找到為止,時間復雜度:O(log(n))。(摘自百度百科)二.代碼
int[] arr ={3,12,24,36,55,68,75,88};
int low = 0;
int high = arr.length - 1;
int mid = -1; while(low <= high) { mid = (low + high) / 2; if (arr[mid] < value){
low = mid + 1;
}else if (arr[mid] > value){
high = mid - 1;
}else{
break;
} }if (low <= high) {
System.out.println("可以找到:index = " + mid + "。"); } else {
System.out.println("無法找到!");
}
執行流程:
1)開始令low=0(指向3),high=7(指向88),則mid=3(指向36)。因為k<mid,故應在前半段中查找。
2)令新的high=mid-1=2(指向24),而low=0(指向3)不變,則新的mid=1(指向12)。此時k>mid,故確定應在後半段中查找。
3)令新的low=mid+1=2(指向24),而high=2(指向24)不變,則新的mid=2,此時k=arr[mid],查找成功。
如果要查找的數不是數列中的數,例如k=25,當第四次判斷時,k>mid[2],在後邊半段查找,令low=mid+1,即low=3(指向36),high=2(指向24)出現low>high的情況,表示查找不成功。
JavaSE語言基礎之數組二分法查找