国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

[java] 二分法查找

2019-11-06 07:45:43
字體:
來源:轉載
供稿:網友

首先上二分法java實現的代碼

import java.util.Arrays;public class BinarySearch { public static int rank(int key, int[] a) { //數組必須是有序的 int lo = 0; int hi = a.length - 1; while(lo <= hi) { //被查找的鍵要么不存在,要么必然存在于a[lo...hi]之中 int mid = lo + (hi - lo) / 2; if(key < a[mid]) { hi = mid - 1; }else if(key > a[mid]) { lo = mid + 1; }else { return mid; } } return -1; } public static void main(String[] args) { int[] arr = new int[] {1,2,7,5,9,10}; Arrays.sort(arr); System.out.PRintln(Arrays.toString(arr)); int index = BinarySearch.rank(7, arr); System.out.println(index); }}

要求:傳入的數組必須是排好序的 邏輯:先將數組分為中間,左邊數組,右邊數組。如果要查找的key正好是中間的則反回索引,如果key 大于 arr[mid],則在右面繼續查找,反之在左面查找。當到達邊界還沒找到時,也就是lo==hi時,lo++ 會大于hi,或者 hi– 會小于lo。則循環終止,返回-1

我們先談談mid值的計算

//如果數組的長度為奇數 數組正好被平均的分為左右兩個要查找數組//如數組為 int[] arr = new int{1,2,3,4,5}//則數組的mid 為 (arr.length - 1) / 2 = 2//mid左邊的數組為{1,2}, 右面為 {4, 5}//如果數組的長度為偶數//如數組為 int[] arr = new int{1,2,3,4,5,6}//則數組的mid 為 (arr.length - 1) / 2 = 2//mid左邊的數組為{1,2}, 右面為 {4, 5, 6}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南康市| 衡阳县| 中方县| 舒兰市| 宾阳县| 佛山市| 攀枝花市| 曲沃县| 滁州市| 洛川县| 两当县| 香港| 保康县| 昌吉市| 昭通市| 吉木乃县| 永登县| 阿瓦提县| 海淀区| 南部县| 五河县| 疏勒县| 武威市| 泗水县| 汾阳市| 涞水县| 中阳县| 苍梧县| 紫金县| 卓资县| 武安市| 北票市| 集安市| 綦江县| 建瓯市| 湘西| 奉贤区| 盐池县| 天津市| 桐梓县| 中西区|