Скорость сортировки в C#.
Как-то один человек, который проводил тренинг по C#, сказал нам,
что Array.Sort работает очень медленно, что скорей всего его алгоритм писали
индусы, а обычный пузырьковый метод должен дать лучшую
производительность, но это надо проверить. Мне стало любопытно,
какие из способов сортировки C# занимают больше времени. Первым что
сделал, так это реализовал пузырьковую сортировку массива из нескольких тысяч
элементов. "Пузырьками" сортировалось несколько секунд, а
"потенциально-индусский" Array.Sort справился почти мгновенно.
Значит Array.Sort писали не индусы, или написали довольно неплохо [:)].
Давайте рассмотрим несколько найденных примеров сортировки.
//===
Array sorting method === static
string[] SortArray(string[] a) { string[] res = (string[])a.Clone(); Array.Sort(res); return res; } //===
LINQ sorting method === static
string[] SortLinq(string[] a) { var res = from item in a orderby item ascending select item; return res.ToArray(); } //===
List sorting method === static
List { List res.Sort(); return res; } ===
Результаты для 46 строк === Array
method: 400 ms LINQ
method: 410 ms List
method: 406 ms ===Результаты
для 92 строк === Array
method: 2220 ms LINQ
method: 2290 ms List
method: 2205 ms ===
Результаты для 460 строк=== Array method:
14504 ms LINQ
method: 15100 ms List
method: 14350 ms
Как видим, сортировка List'ом в двух из трех вариантов быстрее, а сортировка с использованием LINQ проигрывает во всех вариантах.
Тесты взято из этой статьи.