らんたくいっくそーと
数学ガール4巻を読んでいたら乱択クイックソートが出てきたのでPythonで書いてみた。本には疑似コードまで載せてあって読みやすい。
・普通のクイックソート
・乱択クイックソート
main()内でソートするリストの要素をrandint()で100万生成してそれをクイックソートする。一応最後にPythonに元からあるリストのソートと同じ結果になっているかの確認をする。比較のためにseed値を固定しておく。
実行結果がこちら。
・ふつうの
start time: 9.663000 True
・乱択
start time: 11.829000 True
乱択クイックソートの方が少し遅い。何回か繰り返してみたけど大体同じ感じだった。
次にソート済みのリストに対してソートをかけてみる。
c = range(9000)
c = range(9000, 0, -1)
として実行してみた結果がこちら。
ソース | クイックソート | 乱択クイックソート |
---|---|---|
c = range(9000) | 6.739000 | 0.071000 |
c = range(9000, 0, -1) | 13.412000 | 0.074000 |
最初にやったやつ | 9.663000 | 11.829000 |
だいたいこんな感じになった。
ソート済みのリストに対しては乱択クイックソートの方が圧倒的に速いことがわかる。
ソートする対象が、すでにソートされている部分があるかどうかわからないときは乱択クイックソートを使うのも良いかもと思った。