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 */