Скорость сортировки в C#.

вторник, 13 октября 2009, Alexander Honcharuk

Как-то один человек, который проводил тренинг по 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 SortList(List l)

{

    List res = new List(l);

    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 проигрывает во всех вариантах.

Тесты взято из этой статьи.


Ищите нас в интернетах!

Комментарии

Свежие вакансии