余暇に、できるだけ早く走らせたいプログラムを作っています。プログラムはCで書かれています。
プロシージャの大規模なセットは、数値の高い順に並べ替えられる7つの整数へのポインタを操作します。
ここまでは、ライブラリー関数「qsort」を使用して整数をソートしました。アプリケーションの残りの部分が完了したら、qsortへの呼び出しをより速いものに置き換えます。
並べ替えアルゴリズムを使用して、7つの整数の固定数をできるだけ速く並べ替えたい。何を使うのか、なぜそれが最善だと思うのか教えてください。
Big O表記について読んだところ、それがわかったことから、アルゴリズムがソートに必要な要素の数に応じてどれだけの時間がかかるかを測定するだけです。 7つの要素のみをソートする必要がある場合、Big O表記は本当に重要ですか?この場合、O(n * log n)はO(n ^ 2)より高速ですか?
「radixsort」は私には良い選択のようですが、あなたの意見も聞きたいです。
並べ替えアルゴリズムは数百万回使用され、その間、プログラムのユーザーは待たなければなりません。私のプログラムは、qsortを使い始めてから(ハードコーディングされた配列を使用して測定する前に)、実行速度がほぼ10倍遅くなりました。
このきちんとした実装 6つの整数を並べ替える を見てください。ソーティングネットワークによると、7つの整数をソートするには16の比較が必要です。 7つの整数のコードは次のとおりです。
static int sort7(int *d){
#define SWAP(x,y) if (d[y] < d[x]) { int tmp = d[x]; d[x] = d[y]; d[y] = tmp; }
SWAP(1, 2);
SWAP(3, 4);
SWAP(5, 6);
SWAP(0, 2);
SWAP(3, 5);
SWAP(4, 6);
SWAP(0, 1);
SWAP(4, 5);
SWAP(2, 6);
SWAP(0, 4);
SWAP(1, 5);
SWAP(0, 3);
SWAP(2, 5);
SWAP(1, 3);
SWAP(2, 4);
SWAP(2, 3);
#undef SWAP
}
私はコードをテストしなかったことに注意してください!