Вы можете использовать метод расширения , определенный в IList
public static void TimSort<T>(this IList<T> array, Comparison<T> comparer, bool buffered = true)
, чтобы отсортировать список индексов и передать Сравнение, которое ссылается на реальные объекты по данным индексам, сравнивает ихи возвращает отрицательные, положительные или нулевые значения.
Надеюсь, это поможет!