Каковы наилучшие алгоритмы сортировки данных на С#?
Есть ли один алгоритм сортировки, который может обрабатывать 80% сортов?
Приведите примеры кода, если применимо.
Каковы наилучшие алгоритмы сортировки данных на С#?
Есть ли один алгоритм сортировки, который может обрабатывать 80% сортов?
Приведите примеры кода, если применимо.
Посмотрите этот сайт:
Сортировка сравнений с анимациями
Краткий ответ: Быстрая сортировка
Более длинный ответ: Вышеупомянутый сайт покажет вам сильные и слабые стороны каждого алгоритма с некоторыми изящными анимациями.
Короткий ответ: нет лучшего в своем роде (но вы знали, что с тех пор, как вы сказали 80% времени:)), но QuickSort (или 3 Way Quick Sort), вероятно, будет лучшим общим алгоритмом, который вы могли бы использовать.
Это алгоритм, используемый по умолчанию для списков в .Net, поэтому вы можете просто вызвать .Sort
, если у вас уже есть список.
На веб-сайте есть псевдокод, на который я указал вам выше, если вы хотите увидеть, как это реализовать.
Что вы пытаетесь сортировать? Есть ли причина не использовать:
List<T>.Sort() ?
Я уверен, что это использует QuickSort, и вам не нужно беспокоиться о каких-либо ошибках кодирования. Вы можете реализовать IComparable, чтобы изменить то, что вы хотите отсортировать.
Если все ваши данные не вписываются в память... ну, вы уходите на гонки с помощью сортировки Merge или что-то в этом роде.
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/
попробуйте quicksort: http://www.codeproject.com/KB/recipes/QuickSort_gen.aspx