Link repo github: Binary Search
private <T extends Comparable<T>> int BinarySearch(T array[], T key, int left, int right)
{
if (right < left) //1
return -1; //2
int median = (left + right) >>> 1; //3
int comp = key.compareTo(array[median]); //4
if (comp < 0) { //5
return BinarySearch(array, key, left, median - 1); //6
} //7
if (comp > 0) { //8
return BinarySearch(array, key, median + 1, right); //9
} //10
return median; //11
}
Cho dãy: x1, x2, ..., xn; (x[i] <= x[i+1])
Key = c;
- True → 1 <=> right < left
- return -1 (Not found)
- False → 1 <=> right > left
- True → 5 <=> key < array[median]
- return BinarySearch(array, key, left, median-1)
- False → 1 <=> right > left
- False → 5 <=> key >= array[median]
- True → 8 <=> key > array[median]
- return BinarySearch(array, key, median+1, right)
- False → 1 <=> right > left
- False → 5 <=> key >= array[median]
- False → 8 <=> key = array[median]
- return median (Founded)
Cho dãy: 2, 3, 4, 6, 7, 8, 9;
Key = 5;
- left=0, right=6 → median=3
- array[median]=6 > key=5
- left=0, right=2 → median=1
- array[median]=3 < key=5
- left=2, right=2 → median=2
- array[median]=4 < key=5
- right=2 < left=3 → return -1 (Not found)
Cho dãy: 2, 3, 4, 5, 6, 7, 8, 9;
Key = 5;
- left=0, right=7 → median=4
- array[median]=6 > key=5
- left=0, right=3 → median=2
- array[median]=4 < key=5
- left=3, right=3 → median=3
- array[median]=5 = key=5 → return 3 (Founded)