go-sort - 解説

アルゴリズム選択

小規模データ(3-5要素)

3要素の場合、全パターンを列挙して最適解を求めます:

// 3要素の6パターン
// [1,2,3] → ソート済み
// [1,3,2] → sa, ra
// [2,1,3] → sa
// [2,3,1] → rra
// [3,1,2] → ra
// [3,2,1] → sa, rra

中規模データ(100要素)

チャンクベースのアルゴリズムが効果的:

  • データを複数のチャンクに分割
  • 各チャンクをスタックBにプッシュ
  • スタックBから順にスタックAに戻す
  • 大規模データ(500要素)

    基数ソート(Radix Sort)の応用:

  • 各ビット位置で分類
  • 0のビットはスタックBへ
  • 1のビットはローテート
  • スタックBから戻す
  • 次のビット位置へ

最適化のポイント

1. 操作の統合

// 別々に実行
s.Ra()
s.Rb()

// 統合
s.Rr()  // 1操作で済む

2. 最短経路の選択

// 要素を先頭に持ってくる
if position < len/2 {
    // ra を position 回
} else {
    // rra を (len - position) 回
}

3. 状態のキャッシュ

頻繁に参照する値(最小値の位置など)をキャッシュして計算を削減します。