反转插入排序C#

时间:2014-02-10 13:09:43

标签: c#

我在c#中有一个插入排序的工作实现,但是我需要按递减顺序存储这些值。我当前的实现以递增的顺序给出了数字。但我不确定如何扭转它。 A是我的阵列。

for (i = 1; i < A.Length; i++)
{
    int value = A[i];
    j = i - 1;
    while ((j >= 0) && (A[j].CompareTo(value) > 0))
    {
        A[j + 1] = A[j];
        j--;
    }
    A[j + 1] = value;
}

Console.WriteLine("\nSorted\n");
foreach (int x in A)
{
    Console.WriteLine(x);
}

4 个答案:

答案 0 :(得分:4)

改变这个:

while ((j >= 0) && (A[j].CompareTo(value) > 0))

用这个:

while ((j >= 0) && (A[j].CompareTo(value) < 0))

答案 1 :(得分:2)

您可以使用Linq对数组进行排序:

A.OrderBy(x => x);

或者按降序排序(反转):

A.OrderByDescending(x => x);

答案 2 :(得分:1)

您想要反转数组吗?使用Array.Reverse

Array.Reverse(A);

如果您想要按数字排序,可以使用LINQ:

A = A.OrderBy(i => i).ToArray();
A = A.OrderByDescending(i => i).ToArray(); 

如果已经订购了数组Array.Reverse则更有效。

答案 3 :(得分:0)

要反转算法,只需反转比较

即可
while ((j >= 0) && (A[j].CompareTo(value) > 0))

到这个

while ((j >= 0) && (A[j].CompareTo(value) < 0)) // note that it reads '< 0'

撤消您正在检查的条件。