只是爲了好玩我建在C#中的快速排序實現使用LINQ:快速排序LINQ的性能優勢通過T []對的IEnumerable <T>
public static IEnumerable<T> quicksort<T>(IEnumerable<T> input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksort(input.Skip(1).Where(i => i.CompareTo(pivot) <= 0));
var greater = quicksort(input.Where(i => i.CompareTo(pivot) > 0));
return lesser.Append(pivot).Concat(greater);
}
它在大約13秒10000個排序隨機整數。
將其更改爲使用int []而不是List結果的性能會提高約700倍!對相同的10000個隨機整數只需要21ms。
public static T[] quicksortArray<T>(T[] input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksortArray(input.Skip(1).Where(i => i.CompareTo(pivot) <= 0).ToArray());
var greater = quicksortArray(input.Where(i => i.CompareTo(pivot) > 0).ToArray());
return lesser.Append(pivot).Concat(greater).ToArray();
}
只看我會認爲這將有更壞 性能的代碼。我認爲.ToArray()會在內存中創建一個額外的數組,並在那裏複製所有整數。 我認爲傳遞數組與傳遞列表應該大致相同。
那麼這個巨大的性能差異從哪裏來?
https://ideone.com/E5ASv7,https://ideone.com/DAUfmB – Ryan
將'quicksortArray'與'Array進行比較後,您可能會感到有些驚訝。排序'也 – Slai
@Slai我知道這是不高效的,不會使用它的任何事情:-) – marv51