1. C# / Говнокод #10975

    +139

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    public static IEnumerable<T> QuickSort<T>(
    	this IEnumerable<T> source) where T : IComparable<T>
    	{
    		if (!source.Any()) return source;
    		var first = source.First();
    		return source
    			.AsParallel()
    			.GroupBy(i => i.CompareTo(first))
    			.OrderBy(g => g.Key)
    			.SelectMany(g => g.Key == 0 ? g : QuickSort(g));
    	}

    Запостил: HaskellGovno, 16 Июня 2012

    Комментарии (27) RSS

    • Ну так Quick или нет получилось? :)
      Ответить
    • Хрена! Это параллельная сортировка! И какая краткая! Не то что этот длинный хипсорт с википедии. Беру. Спс, посан. Ты меня спас.
      Ответить
      • Лабы ещё не все сдал штоле?
        Ответить
      • Вот её бы померять. Добавляет ли там AssParallel что-нибудь к производительности? :D
        Ответить
        • Вычисления в стиле - проверить трилион делителей для данного числа или прочие задачи с большим количеством работы на итерацию и высокой удельной нагрузкой на процессор - да.

          На вычислениях с нагрузкой на паямть, архивация, например - брать чёто из памяти и искать совпадения.
          Или в случаях когда вся работа в лямбде сводится к сложению двух чисел - нет.
          В первом случае - ядер много, а память одна.
          Во-втором, накладные расходы на функциональщину и динамическое свзяывание больше чем само вычисление.
          Ответить
    • показать все, что скрытоКакой багор )))
      Ответить
    • Ахаха это же знаменитое говно qsort[y|y<=x]++[x]++qsort[y|y>x]!
      То самое, которое даёт энквадрат на упорядоченном списке.
      Ответить
      • теперь и банановое параллельное!
        Ответить
      • >То самое, которое даёт энквадрат на упорядоченном списке.
        Посоветуй алгоритм, чтобы не падало до O(n**2)
        Ответить
        • Кусорта такого нет, но пусть он падает на какой-то эзотеричной хуйне, чем на упорядоченном списке, встречающемся, между прочим, весьма часто.
          А вообще есть сортировка слиянием, кучей, ну и всё такое... Гарантированный nlogn, но в среднем вдвое дольше кусорта.
          Ответить
      • >То самое, которое даёт энквадрат на упорядоченном списке.
        Хуже того - в таком тривиальном исполнении оно еще и стек переполнит.
        Надо было хотя бы заменить >var first = source.First();
        на avg(source.First()+source.Last()+source. Middle()). Хотя с IEnumerable так просто не конечно выйдет.
        Ответить
      • Все правильно, упорядоченный список же встречается 1 раз из n! При большом n им можно пренебречь ;)
        Ответить
        • Это только на детских задачах с рандомом такое возможно. В реальных задачах контейнер часто может быть почти отсортирован, например окромя одного элемента.
          Ответить
    • показать все, что скрытоОБСЛУЖУ В ЖЕНСКОМ БЕЛЬЕ КАВКАЗЦЕВ ТАДЖИКОВ УЗБЕКОВ НА СТРОЙКАХ РЫНКАХ СМС 89119017975 ИЩУ СУТЕНЕРА КАВКАЗЦА АЗИАТА МОЖНО ВЛАСТНУЮ ЖЕНЩИНУ 89119017975
      Ответить
    • показать все, что скрыто188.40.105.142
      Ответить
    • показать все, что скрытоКакой багор )))
      Ответить
    • Зачот!
      Ответить
    • Вау, да тут и LINQ и даже AsParallel.

      > даёт энквадрат на упорядоченном списке.
      Ну то мелочи. Главное что разпаралелено.
      Ответить
      • Я не знаю ни одного наивного человека, который бы верил, что AssParallel не даёт убыль. Это работает на прибыль только на очень больших объёмах данных и только при правильном применении, а не как в данном говнокоде.
        Ответить
    • показать все, что скрытоКакой багор у Тараса и Левина )))
      Ответить

    Добавить комментарий