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降序排”——類庫在實現時使用了類似于“職責鏈模式”的做法,頗為美觀。