0% found this document useful (0 votes)
2 views

15-binary-search

bs

Uploaded by

bsanchana83
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

15-binary-search

bs

Uploaded by

bsanchana83
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 4

Binary search

binary search: Locates a target value in a sorted array/list


by successively eliminating half of the array from
consideration.
 How many elements will it need to examine? O(log N)
 Can be implemented with a loop or recursively

 Example: Searching the array below for the value 42:

inde 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 16
x 0 1 2 3 4 5
valu -4 2 7 1 1 2 2 2 3 3 4 5 5 6 8 9 10
e 0 5 0 2 5 0 6 2 0 6 8 5 2 3
min mid ma
x

1
Binary search code
// Returns the index of an occurrence of target in a,
// or a negative number if the target is not found.
// Precondition: elements of a are in sorted order
public static int binarySearch(int[] a, int target) {
int min = 0;
int max = a.length - 1;

while (min <= max) {


int mid = (min + max) / 2;
if (a[mid] < target) {
min = mid + 1;
} else if (a[mid] > target) {
max = mid - 1;
} else {
return mid; // target found
}
}

return -(min + 1); // target not found


} 2
Recursive binary search (13.3)
Write a recursive binarySearch method.
 If the target value is not found, return its negative insertion
point.

inde 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 16
x 0 1 2 3 4 5
valu -4 2 7 1 1 2 2 2 3 3 4 5 5 6 8 9 10
e 0 5 0 2 5 0 6 2 0 6 8 5 2 3
int index = binarySearch(data, 42); // 10
int index2 = binarySearch(data, 66); // -14

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
}
}
}
4

You might also like