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

比較関数で偶数と奇数を比較しているだけです。他の人が言ったように、クイックソートは不安定です。値が偶数または奇数のいずれかである場合、偶数/奇数に加えて、値の追加チェックを追加してみませんか。

// 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 に答える
0

MSDNから:

Array.Sort は QuickSort アルゴリズムを使用します。この実装は、不安定な並べ替えを実行します。つまり、2 つの要素が等しい場合、それらの順序は保持されない可能性があります。対照的に、安定した並べ替えは、等しい要素の順序を保持します。

于 2013-01-31T07:00:36.690 に答える