sort()
方法的MSDN说明:
使用数组中每个元素的IComparable实现对整个一维数组中的元素进行排序。
我检查了IComparable,但我没有找到任何表明正在使用哪种排序算法的东西。
我需要知道sort()
方法对并行处理的友好程度。
是否有人知道sort()
类正在使用的算法Array
方法是什么?
答案 0 :(得分:4)
此方法使用内省排序(introsort)算法,如下所示:
如果分区大小少于16个元素,则使用插入排序算法。
如果分区数超过2 * LogN,其中N是输入数组的范围,则使用Heapsort算法。
否则,它使用Quicksort算法。
答案 1 :(得分:1)
这是复制和粘贴:
public static void Sort(Array keys, Array items, int index, int length, IComparer comparer) {
if (keys==null)
throw new ArgumentNullException("keys");
if (keys.Rank != 1 || (items != null && items.Rank != 1))
throw new RankException(Environment.GetResourceString("Rank_MultiDimNotSupported"));
if (items != null && keys.GetLowerBound(0) != items.GetLowerBound(0))
throw new ArgumentException(Environment.GetResourceString("Arg_LowerBoundsMustMatch"));
if (index < keys.GetLowerBound(0) || length < 0)
throw new ArgumentOutOfRangeException((length<0 ? "length" : "index"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
if (keys.Length - (index - keys.GetLowerBound(0)) < length || (items != null && (index - items.GetLowerBound(0)) > items.Length - length))
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
Contract.EndContractBlock();
if (length > 1) {
if (comparer == Comparer.Default || comparer == null) {
bool r = TrySZSort(keys, items, index, index + length - 1);
if (r)
return;
}
Object[] objKeys = keys as Object[];
Object[] objItems = null;
if (objKeys != null)
objItems = items as Object[];
if (objKeys != null && (items==null || objItems != null)) {
SorterObjectArray sorter = new SorterObjectArray(objKeys, objItems, comparer);
sorter.Sort(index, length);
}
else {
SorterGenericArray sorter = new SorterGenericArray(keys, items, comparer);
sorter.Sort(index, length);
}
}
}
您可以从https://referencesource.microsoft.com/获取详细信息,Array
课程位于:https://referencesource.microsoft.com/#mscorlib/system/array.cs,156e066ecc4ccedf
一个非常快速的雄鹅看起来不可并行。