.NET 4.0内部实现排序

时间:2012-08-14 00:51:46

标签: .net algorithm

我在Array.Sort中找到了它,

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool TrySZSort(Array keys, Array items, int left, int right);

被调用。 有任何想法如何实现?

2 个答案:

答案 0 :(得分:11)

您可以从SSCLI20 source distribution获得相当可靠的CLR源代码副本。它发布于2005年,当时是CLR版本2的一个非常准确的副本。从未发现明显的差异。

从那时起,这已经发生了变化,已经是7年前了,而且自那时起一个相当重要的CLR版本更新。但TrySZSort()仍然存在,那些低级实现是高度自我保留的。你会发现它在clr / src / vm / ecall.cpp中声明并映射到ArrayHelper :: TrySZSort(),这是在clr / src / vm / arrayhelpers.cpp中声明的C ++方法

否则非常无聊,它只是调用名为ArrayHelpers<T>.QuickSort()的模板类方法,由值类型元素的数组元素类型专门化。

这就是Tony Hoare 52年前写的那种方式。虽然不在C ++中;)

你会发现这段代码是用C ++编写的,而不是this answer中用C#编写的。

答案 1 :(得分:4)

  

有关如何实施的任何想法?

该方法在本机代码中实现,在CLR本身内部。在核心的低级别类型上有很多这样的方法。例如,System.String上的很多方法都被标记为InternalCall,并在公共语言运行时本身中实现。