Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
sink a (r1:rs) | r1 > a = r1:(sink a rs)
sink a l = a:l
kmin k len r (a:l) = kmin k len1 r1 l
where
r1 = if len<k then sink a r
else drop 1 $ sink a r
len1 = if len<k then len+1 else len
kmin _ _ r _ = r
mink k l = reverse $ kmin k 0 [] l
То есть попась в случай, когда опорный элемент оказался в хвосте — очень даже вероятно.
В подавляющем большинстве случаев будет массовая и затратная операция над данными.
Ленивые вычисления