現在、ランダムに生成された数値をソートするためのクイックソートアルゴリズムのベアボーン実装があります。並べ替えは、マージ並べ替えよりも効率的です。ただし、特定の数値セット (逆に並べ替える必要がある逆の数値など) については、ピボットを最適化する必要があります。
int* partition (int* first, int* last);
void quickSort(int* first, int* last) {
if (last - first <= 1) return;
int* pivot = partition(first, last);
quickSort(first, pivot);
quickSort(pivot + 1, last);
}
int* partition (int* first, int* last) {
int pivot = *(last - 1);
int* i = first;
int* j = last - 1;
for (;;) {
while (*i < pivot && i < last) i++;
while (*j >= pivot && j > first) j--;
if (i >= j) break;
swap (*i, *j);
}
swap (*(last - 1), *i);
return i;
}
したがって、このコードでは、パーティショニング ステップのピボットとして乱数を使用するか、最初、中間、および最後の要素の中央値をピボットとして使用します。
どうすればいいですか?
私は並べ替えアルゴリズムを初めて使用しますが、それらの理解はまだ完全ではありません。