Подтвердить что ты не робот

Лучший способ сортировки массива в порядке убывания

У меня есть массив int, который я должен сортировать по убыванию.

Так как я не нашел никакого метода сортировки массива в порядке убывания. В настоящее время я сортирую массив в порядке убывания, как показано ниже

int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );

Теперь вопрос в том, что. Есть ли лучший способ сделать то же самое в С#?

4b9b3361

Ответ 1

В зависимости от порядка сортировки вы можете сделать это:

    int[] array = new int[] { 3, 1, 4, 5, 2 };
    Array.Sort<int>(array,
                    new Comparison<int>(
                            (i1, i2) => i2.CompareTo(i1)
                    ));

... или это:

    int[] array = new int[] { 3, 1, 4, 5, 2 };
    Array.Sort<int>(array,
                    new Comparison<int>(
                            (i1, i2) => i1.CompareTo(i2)
                    ));

i1 и i2 просто меняются на противоположные.

Ответ 2

Используйте метод LINQ OrderByDescending. Он возвращает IOrderedIEnumerable<int>, который вы можете преобразовать обратно в Array, если вам это нужно. Как правило, List<> более функциональны, чем Array s.

array = array.OrderByDescending(c => c).ToArray();

Ответ 3

Конечно, вы можете настроить сортировку.

Вам нужно предоставить делегату Sort() делегат методу сравнения, который он будет использовать для сортировки.

Использование анонимного метода:

Array.Sort<int>( array,
delegate(int a, int b)
  {
    return b - a; //Normal compare is a-b
  }); 

Подробнее об этом:

Сортировка массивов
MSDN - метод Array.Sort(T [], сравнение)

Ответ 4

Да, вы можете передать предикат для сортировки. Это будет ваша обратная реализация.

Ответ 5

Вы можете указать компаратор (реализация IComparer) в качестве параметра в Array.Sort, порядок сортировки фактически зависит от компаратора. Компоновщик по умолчанию используется при сортировке по возрастанию

Ответ 6

class Program
{
    private static int[] table;

    static void Main(string[] args)
    {
        int[] ints = new int[] { 6, 2, 5, 99, 55 };

       table = ints.OrderByDescending(x => x).ToArray();

        foreach (var item in table)
        {
            Console.WriteLine(item);
        }

    }