Building Java Programs: Searching
Building Java Programs: Searching
Chapter 13
Searching
reading: 13.3
O(log N)
inde
x
1
0
1
1
1
2
1
3
1
4
1
5
16
valu
e
-4 2
1
0
1
5
2
0
2
2
2
5
3
0
3
6
4
2
5
0
5
6
6
8
8
5
9
2
10
3
min
mid
ma
x
(13.3)
1
0
1
1
1
2
1
3
1
4
1
5
16
valu -4 2 7 1 1 2 2 2 3 3 4 5 5 6 8
e
0 5 0 2 5 0 6 2 0 6 8 5
int index = binarySearch(data, 42); // 10
int index2 = binarySearch(data, 66); // -14
9
2
10
3
Exercise solution
// Returns the index of an occurrence of the given value in
// the given array, or a negative number if not found.
// Precondition: elements of a are in sorted order
public static int binarySearch(int[] a, int target) {
return binarySearch(a, target, 0, a.length - 1);
}
// Recursive helper to implement search behavior.
private static int binarySearch(int[] a, int target,
int min, int max) {
if (min > max) {
return -1;
// target not found
} else {
int mid = (min + max) / 2;
if (a[mid] < target) {
// too small; go right
return binarySearch(a, target, mid + 1, max);
} else if (a[mid] > target) { // too large; go left
return binarySearch(a, target, min, mid - 1);
} else {
return mid;
// target found; a[mid] == target
}
}
}
5