私は別の SO の質問を解決するアイデアを思いつきました。私はそれについてあまり詳しくないので、関数の複雑さを判断するのに役立つことを望んでいます。各チャンクが「ソート解除」されると推測するのは正しいでしょうか? では、あるチャンクの最後を別のチャンクの先頭と比較する sortBy 関数の複雑さはどのようなものでしょうか? 私の推測では、その関数はペアのみを比較し、合計リストに関して 1 つのチャンクの順序を見つける必要はありません。また、関数全体の遅延最適化のために、Haskell は異なる複雑さを提供しますか? 前もって感謝します!O (n * log 2)
import Data.List.Split (chunksOf)
import Data.List (sortBy)
rearrange :: [Int] -> [Int]
rearrange = concat
. sortBy (\a b -> compare (last a) (head b))
. map (sortBy (\a b -> compare b a))
. chunksOf 2