更新时间:2017-10-17 08:43:30浏览次数:1+次
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;
}
}
FCL的数组类中 内置了专门用来处理排序的一个类 ArraySortHelper<T>。相关资讯