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

Лучшие алгоритмы сортировки для С#/.NET в разных сценариях

Каковы наилучшие алгоритмы сортировки данных на С#?

Есть ли один алгоритм сортировки, который может обрабатывать 80% сортов?

Приведите примеры кода, если применимо.

4b9b3361

Ответ 1

Посмотрите этот сайт: Сортировка сравнений с анимациями

Краткий ответ: Быстрая сортировка

Более длинный ответ: Вышеупомянутый сайт покажет вам сильные и слабые стороны каждого алгоритма с некоторыми изящными анимациями.

Короткий ответ: нет лучшего в своем роде (но вы знали, что с тех пор, как вы сказали 80% времени:)), но QuickSort (или 3 Way Quick Sort), вероятно, будет лучшим общим алгоритмом, который вы могли бы использовать.

Это алгоритм, используемый по умолчанию для списков в .Net, поэтому вы можете просто вызвать .Sort, если у вас уже есть список.

На веб-сайте есть псевдокод, на который я указал вам выше, если вы хотите увидеть, как это реализовать.

Ответ 2

Что вы пытаетесь сортировать? Есть ли причина не использовать:

List<T>.Sort() ? 

Я уверен, что это использует QuickSort, и вам не нужно беспокоиться о каких-либо ошибках кодирования. Вы можете реализовать IComparable, чтобы изменить то, что вы хотите отсортировать.

Если все ваши данные не вписываются в память... ну, вы уходите на гонки с помощью сортировки Merge или что-то в этом роде.

Ответ 3

Bubblesort и Insertionsort O (n ^ 2), Mergesort и Quicksort - O (nlogn). Вы можете использовать метод Sort() из списка, который реализует Quicksort, а также вы можете попробовать реализовать его и адаптировать к вашим потребностям. Вот базовая реализация: Quicksort

//O(nlogn) 
public static void QuickSort(int[] array, int init, int end)
{
   if (init < end)
   {
       int pivot = Partition(array, init, end);
       QuickSort(array, init, pivot-1);
       QuickSort(array, pivot + 1, end);
   }   
}

//O(n)
private static int Partition(int[] array, int init, int end)
{
   int last = array[end];
   int i = init - 1;
   for (int j = init; j < end; j++)
   {
        if (array[j] <= last)
        {
            i++;
            Exchange(array, i, j);     
         }
    }
    Exchange(array, i + 1, end);
    return i + 1;
}

private static void Exchange(int[] array, int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

Из https://yadiragarnica.wordpress.com/2015/10/15/sorting-arrays/