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に戻す
- 各ビット位置で分類
- 0のビットはスタックBへ
- 1のビットはローテート
- スタックBから戻す
- 次のビット位置へ
大規模データ(500要素)
基数ソート(Radix Sort)の応用:
最適化のポイント
1. 操作の統合
// 別々に実行
s.Ra()
s.Rb()
// 統合
s.Rr() // 1操作で済む
2. 最短経路の選択
// 要素を先頭に持ってくる
if position < len/2 {
// ra を position 回
} else {
// rra を (len - position) 回
}
3. 状態のキャッシュ
頻繁に参照する値(最小値の位置など)をキャッシュして計算を削減します。