Implement IComparer<int> , which allows for comparisons:
private class CountComparer : IComparer<int> { public int Count { get; private set; } public CountComparer() { Count = 0; } public int Compare(int x, int y) { Count++; return x.CompareTo(y); } }
Then use it as a comparator in the BinarySearch overload, which takes a comparator :
CountComparer comparer = new CountComparer(); int answer = numbers.BinarySearch(Lookfor, comparer);
Then the comparator contains a counter:
Console.WriteLine("The binary search made {0} comparisons.", comparer.Count);
Bonus: general counting correlator for any comparable type:
private class CountComparer<T> : IComparer<T> where T : IComparable<T> { public int Count { get; private set; } public CountComparer() { Count = 0; } public int Compare(T x, T y) { Count++; return x.CompareTo(y); } }
source share