LoginSignup
8
3

More than 3 years have passed since last update.

「スターリンソート」を改善したオートクラシーソート

Posted at

話題の粛清ソートアルゴリズム「スターリンソート」をPythonで実装したというネタがあったので乗っかります。

元ネタは

ソートされていない要素を削除(粛清)して、強引に昇順リストを生成

というものですが、率直に言ってスターリンはまだ甘いです。
まず、ソート結果にも複数の要素が含まれてるということは、変更を加えられて再度、ソートされていない状態になる可能性を残してしまいます。
さらに、そのような不完全さを残しているにも関わらず、これにはO(n)もの時間がかかってしまいます。
こんなことでは真の独裁は維持できません。

さて、どうしたものか。
ということで、困ったときはドラえもんです。
かの有名な「どくさいスイッチ」を参考にしましょう。
最後にのび太が1人になる(いや、まあ、現実にはごにょごにょなんですが)アレです。

はい、オートクラシーソート!

autocracySort :: [a] -> [a]
autocracySort [] = []
autocracySort (x:_) = [x]
print $ autocracySort [1, 2, 3]
-- => [1]
print $ autocracySort [9, 234, 23, 2, 1, 93]

いくつ要素が含まれていようが、最初の1要素だけを含んだリストを返します。
ソート結果が正しいことも簡単に確認できる完璧なソートです。
そして何と計算量オーダーはO(1)です。

print $ autocracySort [n * n | n <- [1..]]
-- => [1]

さらに何と無限リストも扱えます。
これなら無限に湧いてくる聞き分けのない市民がいても、安心して独裁生活を送れます。

では、みなさん、良い独裁ライフを!

8
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3