固定長配列を使用して循環バッファーを実装しました。有効なデータの開始点を示すために、インデックス ( _startIndex
) を使用します。同様に、有効なデータの末尾を指すために、別のインデックス ( _endIndex
) を使用します。以下は例です。
9 8 7 6 5 4 3 2 1 0 <-- array indices
3 2 1 0 5 4 <-- buffer indices
-----------------------------------------
| | | | | | | | | | |
-----------------------------------------
^ ^
_startIndex _endIndex
次に、このバッファーの要素を再配置する必要があります。最小の要素をバッファーの位置 0 に移動し、最大の要素をバッファーの位置 5 に移動する必要があります。
私の考えは、次の方法に基づいています。
int GetArrayIndex(int bufferIndex)
{
return (_startIndex + bufferIndex) % LENGTH;
// LENGTH is the length of the array
}
このように、ソート アルゴリズムは、上記の方法を使用してバッファを順番に読み取ることができるため、バッファが同じ配列の 2 つの連続しない部分で構成されていることを意識する必要はありません。循環バッファをソートするより良い方法はありますか?