- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
public class BinarySearch {
// for all i in [1..n): a[i - 1] >= a[i]
public static int iterative_binary_search(int[] a, int x) {
int l = -1, r = a.length;
// (l == -1 || a[l] > x) && (r == a.length || a[r] <= x)
while (l < r - 1) {
assert (l < 0 || a[l] > x) && (r >= a.length || a[r] <= x);
int mid = l + (r - l) / 2;
if (a[mid] <= x) {
r = mid;
}
else {
l = mid;
}
}
return r;
}
// if (exists i: a[i] <= x) then
// result = min i: a[i] <= x
// else
// result = a.length
// for all i in [1..n): a[i - 1] >= a[i]
public static int recursive_binary_search(int[] a, int x) {
return recursive_binary_search(a, x, -1, a.length);
}
// if (exists i: a[i] <= x) then
// result = min i: a[i] <= x
// else
// result = a.length
// for all i in [1..n): a[i - 1] >= a[i]
// -1 <= l < r <= a.length
// (l == -1 || a[l] > x) && (r == a.length || a[r] <= x)
public static int recursive_binary_search(int[] a, int x, int l, int r) {
if (l >= r - 1) {
return r;
}
int mid = l + (r - l) / 2;
if (a[mid] <= x) {
r = mid;
}
else {
l = mid;
}
return recursive_binary_search(a, x, l, r);
}
// if (exists i in ([l, r] intersect [0, a.length)): a[i] <= x) then
// result = min i: in ([l, r] intersect [0, a.length)): a[i] <= x
// else
// result = r
public static void main(String[] args) {
int a[] = new int[args.length - 1];
for (int i = 1; i < args.length; ++i) {
a[i - 1] = Integer.parseInt(args[i]);
}
int x = Integer.parseInt(args[0]);
System.out.println(iterative_binary_search(a, x));
}
}
Поскольку это на 146% лаба, ничего плохого в этом не вижу. Скорее, наоборот.
И вообще, может, этот код скомпиллирован в жабу из декларативного языка более высокого уровня, и компилятор вставил куски оригинальных исходников для удобства чтения кофейного ассемблера
И вообще я вместо заблоченного пастбина сюда захожу.
Рашкапроблемы?
Tor или I2P не спасут отца русской демократии?
Найди или умри.