Skip to content

Instantly share code, notes, and snippets.

@abeham
Created July 5, 2017 23:54
Show Gist options
  • Save abeham/60aa23077486d7263c3a08235f89ad2d to your computer and use it in GitHub Desktop.
Save abeham/60aa23077486d7263c3a08235f89ad2d to your computer and use it in GitHub Desktop.
public int BinarySearch<T>(IList<Tuple<T, double>> values, T value, IComparer<T> comparer = null) {
if (values.Count == 0) return -1;
if (comparer == null) comparer = Comparer<T>.Default;
var lower = 0;
var upper = values.Count - 1;
while (lower <= upper) {
var mid = (lower + upper) / 2;
var result = comparer.Compare(value, values[mid].Item1);
if (result == 0) return mid;
else if (result < 0) { // value < values[mid]
upper = mid - 1;
} else { // value > values[mid]
lower = mid + 1;
}
}
return ~lower;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment