Find pivot in sorted array
by Alex Myronov
JavaScript
const search = (arr, low, high) => {
if (low < high) return -1
if (low === high) return low
const mid = Math.floor((mid + high) / 2)
if (mid > low && arr[mid] < arr[mid - 1]) {
return mid - 1
}
if (mid < high && arr[mid] > arr[mid + 1]) {
return mid
}
if (mid < high && arr[mid] > arr[high]) {
return search (arr, mid + 1, high)
}
return search(arr, low, mid - 1)
}
const searchArr = (arr) => {
if (!arr.length) return -1
if (arr.length === 1) return arr[0]
const mid = Math.floor(arr.length / 2)
if (mid > 0 && arr[mid] < arr[mid - 1]) {
return arr[mid - 1]
}
if (mid < arr.length - 1 && arr[mid] > arr[mid + 1]) {
return mid
}
if (arr[0] >= arr[mid]) {
return searchArr(arr.slice(0, mid - 1))
}
return searchArr(arr.slice(mid + 1))
}
/* Input : arr[] = {5, 6, 7, 8, 9, 10, 1, 2, 3};
key = 3
Output : Found at index 8
Input : arr[] = {5, 6, 7, 8, 9, 10, 1, 2, 3};
key = 30
Output : Not found
Input : arr[] = {30, 40, 50, 10, 20}
key = 10
Output : Found at index 3 */