反向后对BinarySearch感到困惑

时间:2019-02-27 09:24:31

标签: c# binary-search

我想在降序列表中找到元素索引,但是BinarySearch返回一个负数。为什么会这样呢?这是我的代码段:

List<int> list = new List<int>();
list.Add(4);
list.Add(1);
list.Add(5);
list.Add(2);
list.Add(3);
list.Sort();
list.Reverse();
var elementIndex = list.BinarySearch(5);

1 个答案:

答案 0 :(得分:1)

问题出在默认的比较器中,该比较器期望列表仅按升序排序。如果要对按降序排列的列表使用BinarySearch,则应实现IComparer接口。例如:

class ReverseComparer : IComparer<int>
{
    public int Compare(int x, int y)
    {
        return Comparer<int>.Default.Compare(y, x);
    }
}

然后将其作为参数传递给方法:

...
var elementIndex = list.BinarySearch(5, new ReverseComparer());
相关问题