Как работает Array.Sort - C#
Формулировка задачи:
Собственно вопрос в том, как всё-таки работает сортировка Array.Sort?
Этот вопрос возник потому, что после анализа время ее работы с другими сортировками (к примеру быстрой и Шелла) заметна победа Array.Sort причем с очень значительным отрывом.
Пробовал просматривать ее Deflector'ом, но как-то я запутался там. Может быть кто-то в более понятной форме может объяснить на каких алгоритмах она основана?
Решение задачи: «Как работает Array.Sort»
textual
Листинг программы
private static void IntroSort(T[] keys, int lo, int hi, int depthLimit, IComparer<T> comparer)
{
while (hi > lo)
{
int num = (hi - lo) + 1;
if (num <= 0x10)
{
switch (num)
{
case 1:
return;
case 2:
ArraySortHelper<T>.SwapIfGreater(keys, comparer, lo, hi);
return;
case 3:
ArraySortHelper<T>.SwapIfGreater(keys, comparer, lo, hi - 1);
ArraySortHelper<T>.SwapIfGreater(keys, comparer, lo, hi);
ArraySortHelper<T>.SwapIfGreater(keys, comparer, hi - 1, hi);
return;
}
ArraySortHelper<T>.InsertionSort(keys, lo, hi, comparer);
return;
}
if (depthLimit == 0)
{
ArraySortHelper<T>.Heapsort(keys, lo, hi, comparer);
return;
}
depthLimit--;
int num2 = ArraySortHelper<T>.PickPivotAndPartition(keys, lo, hi, comparer);
ArraySortHelper<T>.IntroSort(keys, num2 + 1, hi, depthLimit, comparer);
hi = num2 - 1;
}
}