1
    static void Main()
    {
        var array = new[] {1, 2, 3, 4, 5};
        Array.Sort(array, (x, y) => x % 2 == y % 2 ? 0 : x % 2 == 1 ? -1 : 1);
        array.ToList().ForEach(Console.WriteLine);
    }

The output result is 3,5,1,2,4.

据我了解,在排序委托中:奇数等于奇数;偶数等于偶数;奇数在偶数之前。为什么输出不是 1,3,5,2,4?谢谢。

4

2 回答 2

0

来自MSDN

Array.Sort 使用快速排序算法。此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相反,稳定排序保留了相等元素的顺序。

于 2013-01-31T07:00:36.690 回答
0

您只是在比较器功能中比较偶数和奇数。就像其他人说的那样,快速排序是不稳定的。当值都是偶数或奇数时,为什么不在偶数/奇数之外添加额外的值检查。

// if x odd and y even return -1
// else if x even and y odd return 1
// else return x.CompareTo(y)

Array.Sort(array, (x, y) => x % 2 == y % 2 ? x.CompareTo(y) : x % 2 > y % 2 ? -1 : 1);
于 2013-01-31T07:26:33.680 回答