binarySearch function

int binarySearch(
  1. List<double> arr,
  2. double userValue,
  3. int min,
  4. int max,
)

Implementation

int binarySearch(List<double> arr, double userValue, int min, int max) {
  if (max >= 0 && min >= 0 && max < arr.length && max >= min) {
    int mid = ((max + min) / 2).floor();
    if (min == 0 && userValue <= arr[min]) return 0;
    if (userValue == arr[min]) return min;
    if (userValue == arr[max]) return max;
    if (userValue < arr[mid] && userValue > arr[mid - 1]) {
      return mid - 1;
    }
    else if (userValue > arr[mid]) {
      return binarySearch(arr, userValue, mid + 1, max);
    }
    else {
      return binarySearch(arr, userValue, min, mid - 1);
    }
  }
  if (min >= arr.length || max >= arr.length) return arr.length - 1;
  if (min < 0 || max < 0) return 0;
  if (min < 0 || arr[min] >= userValue) return min;
  if (max >= arr.length || userValue >= arr[max]) return max;
  // should never get here
  print(
      'min, max, $userValue, $min, $max, ${arr.length}, -1, ${arr[min]}, ${arr[max]}');
  return -1;
}