binarySearch function
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;
}