internal abstract class EnumerableSorter<TElement> { internal abstract int CompareKeys(int index1, int index2); internal abstract void ComputeKeys(TElement[] elements, int count);
PRivate void QuickSort(int[] map, int left, int right) { ... }
internal int[] Sort(TElement[] elements, int count) { this.ComputeKeys(elements, count);
int[] map = new int[count]; for (int i = 0; i < count; i++) { map[i] = i; }
不过,我还是强烈建议您阅读一下EnumerableSorter<TElement>及其子类EnumerableSorter<TElement, TKey>的实现,以此了解LINQ to Object是如何优雅地支持以下表达式的:
var sorted = from p in people orderby p.Age orderby p.ID descending select p;这个表达式的含义是“将Person序列首先根据Age属性进行升序排列,如果Age相同则再根据ID降序排”——类库在实现时使用了类似于“职责链模式”的做法,颇为美观。