1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クイックソート、ヒープソート、マージソートのメリット ~実際のソートを添えて~

Posted at

自分は実際にC++でソートアルゴリズムの速さを計ったのでそれについて話します。
実際に計った結果は、100万の長さのランダムな配列を揃えさせた場合です。
ms、ミリ秒単位です。
多少誤差があります。

クイックソート

  • とりあえずインプレース(配列の2か所を入れ替える作業を使って完結する)ソート内でかなり速い
  • 特定のパターン等に弱く、計算量が最大O(n^2)になってしまう
  • 再帰呼出がある
    実際の結果は、372msです。

ヒープソート

  • クイックソートと同じくインプレースソートである
  • 再帰呼出がある
  • クイックソートと違い、安定して計算量O(n logn)を出せる
  • 計算量的にはクイックソートより速いが実際はそれよりちょっと遅い
    実際の結果は505msです。

マージソート

  • インプレースではなく、揃える配列の長さ分の追加の配列が必要
  • 再帰呼出がある
  • 揃えた後、揃える前の状態が、同じ要素の相対的な順序が同じになる(安定ソート)
  • まあまあ遅い(O(n^2)よりは速い)
    実際の結果は727msです。

基数ソート(LSD)

ここのLSDは、薬物ではなく、Least Significant Digitの略、
最下位桁の意味で、最下位桁から揃えるという意味です。

  • マージソートと同じく、揃えた後、揃える前の状態が、同じ要素の相対的な順序が同じになる(安定ソート)
  • 圧倒的に速い
  • メモリが必要で、バージョンによるが揃える配列の長さの揃える基数倍ぐらい必要
    実際の結果は195msです。(速い。)

スムースソート

  • ヒープソートの亜種
  • 安定ソートではない
  • 複雑
  • 結構遅いが計算量的には最適計算量がO(n)なので速いはず
    実際の結果は1769msです。(遅い。)

まとめ

名前 安定? 結果 メモリについて
クイックソート いいえ 372ms インプレース
ヒープソート いいえ 505ms インプレース
マージソート はい 727ms 配列の長さ分
基数ソート(LSD) はい 195ms 配列の長さ分x揃える基数
スムースソート いいえ 1769ms インプレース

好評でしたら増やします。最後まで見てくれてありがとうございます。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?