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?感谢。
答案 0 :(得分:0)
来自MSDN:
Array.Sort使用QuickSort算法。此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相反,稳定的排序保留了相等元素的顺序。
答案 1 :(得分: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);