<script>
function
ascendingBinarySearch(arr, low, high, key) {
while
(low <= high) {
let mid = Math.floor(low + (high - low) / 2);
if
(arr[mid] == key)
return
mid;
if
(arr[mid] > key)
high = mid - 1;
else
low = mid + 1;
}
return
-1;
}
function
descendingBinarySearch(arr, low, high, key) {
while
(low <= high) {
let mid = Math.floor(low + (high - low) / 2);
if
(arr[mid] == key)
return
mid;
if
(arr[mid] < key)
high = mid - 1;
else
low = mid + 1;
}
return
-1;
}
function
findBitonicPoint(arr, n, l, r) {
let mid;
let bitonicPoint = 0;
mid = Math.floor((r + l) / 2);
if
(arr[mid] > arr[mid - 1]
&& arr[mid] > arr[mid + 1]) {
return
mid;
}
else
if
(arr[mid] > arr[mid - 1]
&& arr[mid] < arr[mid + 1]) {
bitonicPoint = findBitonicPoint(arr, n, mid, r);
}
else
if
(arr[mid] < arr[mid - 1]
&& arr[mid] > arr[mid + 1]) {
bitonicPoint = findBitonicPoint(arr, n, l, mid);
}
return
bitonicPoint;
}
function
searchBitonic(arr, n, key, index) {
if
(key > arr[index])
return
-1;
else
if
(key == arr[index])
return
index;
else
{
let temp
= ascendingBinarySearch(arr,
0, index - 1,
key);
if
(temp != -1) {
return
temp;
}
return
descendingBinarySearch(arr,
index + 1,
n - 1,
key);
}
}
let arr = [-8, 1, 2, 3, 4, 5, -2, -3];
let key = 1;
let n, l, r;
n = arr.length;
l = 0;
r = n - 1;
let index;
index = findBitonicPoint(arr, n, l, r);
let x = searchBitonic(arr, n, key, index);
if
(x == -1)
document.write(
"Element Not Found"
+
"<br>"
);
else
document.write(
"Element Found at index "
+ x +
"<br>"
);
</script>