实现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((方法必须与它做任何事情吗

实现Sort时如何调用Icomparer.Compare()方法

此方法使用内省排序(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方法的内部实现有关。尽管您可能会窥探实际逻辑的内部,但通常不应该麻烦,因为您只对最终结果感兴趣(即,您的数组正在排序(。