- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 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));
}
piocsic 16.06.2012 01:56 # +4
guest 16.06.2012 11:09 # +3
guest 16.06.2012 19:24 # +1
HaskellGovno 18.06.2012 00:10 # +2
3.14159265 18.06.2012 15:25 # +2
На вычислениях с нагрузкой на паямть, архивация, например - брать чёто из памяти и искать совпадения.
Или в случаях когда вся работа в лямбде сводится к сложению двух чисел - нет.
В первом случае - ядер много, а память одна.
Во-втором, накладные расходы на функциональщину и динамическое свзяывание больше чем само вычисление.
Pedofil 16.06.2012 11:26 # −9
TarasB 16.06.2012 11:33 # +2
То самое, которое даёт энквадрат на упорядоченном списке.
Lure Of Chaos 16.06.2012 11:35 # +6
guest 16.06.2012 19:23 # +1
Посоветуй алгоритм, чтобы не падало до O(n**2)
TarasB 16.06.2012 19:37 # +3
А вообще есть сортировка слиянием, кучей, ну и всё такое... Гарантированный nlogn, но в среднем вдвое дольше кусорта.
guest 16.06.2012 19:39 # −12
TarasChlenodevka 18.06.2012 01:18 # −10
3.14159265 16.06.2012 19:29 # +3
Хуже того - в таком тривиальном исполнении оно еще и стек переполнит.
Надо было хотя бы заменить >var first = source.First();
на avg(source.First()+source.Last()+source. Middle()). Хотя с IEnumerable так просто не конечно выйдет.
bormand 16.06.2012 19:29 # +2
HaskellGovno 18.06.2012 00:12 # −2
guest 16.06.2012 11:34 # −11
guest 16.06.2012 11:35 # −10
guest 16.06.2012 11:36 # −10
Pedofil 16.06.2012 11:53 # −11
guest 16.06.2012 11:56 # −10
koodeer 16.06.2012 13:22 # −1
Pedofil 16.06.2012 13:48 # −11
3.14159265 16.06.2012 19:16 # +7
> даёт энквадрат на упорядоченном списке.
Ну то мелочи. Главное что разпаралелено.
HaskellGovno 18.06.2012 13:02 # +4
TarasChlenodevka 18.06.2012 13:14 # −9
3.14159265 18.06.2012 15:20 # +4
Ну по сцылке ниже мне пришлось разъянснять это сразу двоим!
http://govnokod.ru/9194
guest 16.06.2012 19:25 # −9