c# - 在 List<T>.Sort() 方法中,项目是否与自身进行了比较?

标签 c# sorting quicksort icomparer

如果我将自定义 IComparer 传递给 List 的 Sort() 方法的实例,是否会使用同一项目调用比较器的 Compare(x,y) 方法?

即。是否有可能调用 Compare(x,x)

编辑:对列表项不同的情况更感兴趣。

最佳答案

我写了一个测试程序来试试看。看起来它实际上执行 Compare() 相同的元素(至少为相同的项目调用 Compare() 两次)。在此程序中,调用 Compare() 时使用参数 (2, 2)。

using System;
using System.Collections.Generic;

static class Program
{
    class MyComparer : Comparer<int>
    {
        public override int Compare(int x, int y)
        {
            Console.WriteLine("Compare(" + x + ", " + y + ")");
            if (x < y) return -1;
            if (x > y) return 1;
            return 0;
        }
    }

    static void Main()
    {
        MyComparer comparer = new MyComparer();
        List<int> list = new List<int> { 1, 2, 3 };
        list.Sort(comparer);
        return;

    }
}

输出是:

Compare(1, 2)
Compare(1, 3)
Compare(2, 3)
Compare(1, 2)
Compare(2, 2)
Compare(2, 3)
Compare(2, 2)

关于c# - 在 List<T>.Sort() 方法中,项目是否与自身进行了比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373652/

相关文章:

c# - float 问题 : C++ to C# migration

c# - 带平铺的透视图像变换

c# - MVC 4 中的自定义错误

java - 如何按多个字段对客户端的java对象进行排序?

c - 快速排序分区函数的参数

python - 为什么我的基数排序 python 实现比快速排序慢?

c# - 存储过程 Postgresql 和 C# WPF

Javascript:我应该将其定义为数组键还是对象属性?

c++ - (使用 'while' 的插入排序)和(使用 'for' 的插入排序)之间的计算时间有何不同?

Kruskal 算法的 C++ 实现