我已经使用固定长度数组实现了一个循环缓冲区。为了指向有效数据的开头,我使用了索引 ( _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
}
这样,排序算法可以使用上述方法顺序读取缓冲区,而不必知道缓冲区由同一数组的两个不连续部分组成。有没有更好的方法来对循环缓冲区进行排序?