基礎算法 - 二分查找

public class Main { private static int binary_search(int[] x, int key) { int l = 0, r = x.length - 1; while (l <= r) { int m = (l + r) >>> 1; if (x[m] == key) { return m; } else if (x[m] < key) { ++ l; } else { -- r; } } return -1; } private static int lower_bound(int[] x, int key) { int first = 0; int len = x.length; while (len > 0) { int half = len >>> 1; int m = first + half; if (x[m] < key) { // 右半區 first = m + 1; len -= half + 1; } else { // 左半區 len = half; } } return first; } private static int upper_bound(int[] x, int key) { int first = 0; int len = x.length; while (len > 0) { int half = len >>> 1; int m = first + half; if (x[m] <= key) { // 右半區 first = m + 1; len -= half + 1; } else { // 左半區 len = half; } } return first; } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章