在.NET中的Array类上使用sort()方法的算法是什么?

时间:2017-03-28 13:35:41

标签: .net algorithm sorting

sort()方法的

MSDN说明:

  

使用数组中每个元素的IComparable实现对整个一维数组中的元素进行排序。

我检查了IComparable,但我没有找到任何表明正在使用哪种排序算法的东西。

我需要知道sort()方法对并行处理的友好程度。

是否有人知道sort()类正在使用的算法Array方法是什么?

2 个答案:

答案 0 :(得分:4)

来自MSDN documentation

  

此方法使用内省排序(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

一个非常快速的雄鹅看起来不可并行。