.NET 4.0 内部实现排序

标签 .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);

被调用。 知道这是如何实现的吗?

最佳答案

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

从那时起,这已经是 7 年前的事了,此后 CLR 版本进行了一次相当重要的更新。但是 TrySZSort() 仍然存在,那些低级实现是高度 self 保护的。您会发现它在 clr/src/vm/ecall.cpp 中声明并映射到 ArrayHelper::TrySZSort(),这是一个在 clr/src/vm/arrayhelpers.cpp 中声明的 C++ 方法

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

这正是 Tony Hoare 在 52 年前写下它的方式。尽管不是在 C++ 中;)

您会在 this answer 中找到此代码用 C++ 而不是 C# 编写的原因.

关于.NET 4.0 内部实现排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11944324/

相关文章:

.net - 在不停机的情况下部署 ASP.NET 网站更改和 SQL Server 更改

algorithm - 处理基于电路的有向图的带有循环的图的节点,用于音频DSP

python - 使用 Python 解析混合平面文件数据以写入 xls

c++ - 如何停止 std::set 排序?

.net - Roslyn 中的可扩展格式?

c# - 如何在 Settings.Default 上保存 List<string>?

.net - JSON.NET 返回未格式化的字符串

java - 中位数中位数的奇怪错误作为找到第 K 个最大元素的枢轴

python - 有限制的 yield 子组合

c# - Microsoft Entity Framework 和 ADO.NET Entity Framework (.edmx) 是否相同?