Си диез / Говнокод #10975 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 HaskellGovno, (Updated )

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

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

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

    > даёт энквадрат на упорядоченном списке.
    Ну то мелочи. Главное что разпаралелено.
    Ответить
    • Я не знаю ни одного наивного человека, который бы верил, что AssParallel не даёт убыль. Это работает на прибыль только на очень больших объёмах данных и только при правильном применении, а не как в данном говнокоде.
      Ответить
      • >Я не знаю ни одного наивного человека, который бы верил, что AssParallel не даёт убыль.
        Ну по сцылке ниже мне пришлось разъянснять это сразу двоим!
        http://govnokod.ru/9194
        Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8