bogo sort
ボゴソートの話を耳にしたので遊びで実装してみました。
乱数で 0 ~ 100 までのランダムな数値を 10 個、リストに格納します。
そのリストの要素を昇順にソートするのですが、ボゴソートはテキトーに並べて、結果的に昇順だったら終了するという何とも無駄の多いアルゴリズムです。
恐らく…っというか実戦では100%使う機会のないアルゴリズムです。
合ってるか合っていないか分からないので、テキトーに正解になるまで、ただひたすら並び替えるという、ありえないレベルのパワープレイアルゴリズムです。
コンピューターはテキトーに並び替えるという事ができないので、乱数を使用します。
import random
from typing import List
def in_order(num: list[int]) -> bool:
return all(num[i] <= num[i+1] for i in range(len(num)-1))
def bogo_sort(num: list) -> List[int]:
while not in_order(num):
random.shuffle(num)
return num
if __name__ == "__main__":
nums = [random.randint(0, 100) for _ in range(10)]
print(nums)
print(bogo_sort(nums))
"""
※出力結果
乱数で生成されたリスト
[93, 94, 33, 12, 6, 46, 3, 59, 81, 69]
昇順にソートした結果
[3, 6, 12, 33, 46, 59, 69, 81, 93, 94]
"""
実際に動かしてみると分かりますが、ビックリするくらいモターッとしてます。
テキトーにやっているので当たり前なのですが、要素の数が増えていき運が悪いと時間がかかります。
効率が悪すぎですね。
逆に、よくソートできるなーっと不思議な気持ちになってしまうアルゴリズムでした。