C# 中排序方法的准确行为
本文关键字:排序 方法 | 更新日期: 2023-09-27 17:56:51
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?谢谢。
来自 MSDN:
Array.Sort 使用 QuickSort 算法。此实现执行不稳定排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相反,稳定排序保留相等元素的顺序。
您只是在比较器函数中比较偶数和奇数。就像其他人说的,快速排序是不稳定的。当值既是偶数又是奇数时,为什么不在偶数/奇数之外添加额外的值检查。
// 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);