实现Sort时如何调用Icomparer.Compare()方法
本文关键字:Sort Icomparer Compare 方法 调用 何调用 实现 | 更新日期: 2023-09-27 18:08:30
- 谁调用Icomparer.Compare((方法
请考虑以下示例。
Array.Sort(Myfiles, new customSort())
.
.
.
private class customSort : IComparer<object>
{
public override int Compare(obj A, obj B)
{
return (A.Value==B.Value?(0):((A.Value < B.Value)?(-1):(1)));
}
}
如果Myfiles包含对象集合,
- A和B是如何决定的
- Myfiles集合中的A和B是连续的对象吗
- 如果没有,如何从Myfiles中选择A和B
- Array.Sort((方法必须与它做任何事情吗
此方法使用内省排序(introsort(算法,如下所示:
- 如果分区大小小于16个元素,则使用插入排序算法
- 如果分区数超过2*LogN,其中N是输入数组的范围,则使用Heapsort算法
- 否则,它将使用快速排序算法
发件人http://msdn.microsoft.com/en-us/library/kwx6zbd4.aspx
第一个选项是一张漂亮的gif图:http://en.wikipedia.org/wiki/Insertion_sort#mediaviewer/File:Insertion-sort-sample-300px.gif
这取决于排序算法。当算法必须比较两个对象以确定它们的相对顺序时,它调用Compare
方法。
对于像Bubblesort A和B这样的算法,它们可能是邻居,对于我现在能想到的任何其他算法,它们都可能是集合中的任何对象。
显然,调用发生在Sort
方法中。所有其他问题都与Sort
方法的内部实现有关。尽管您可能会窥探实际逻辑的内部,但通常不应该麻烦,因为您只对最终结果感兴趣(即,您的数组正在排序(。