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;
}
}
基礎算法 - 二分查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.