我使用一个固定长度的数组实现了循环缓冲区。为了指向有效数据的起始位置,我使用一个索引(_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
}
通过使用上述方法,排序算法可以按顺序读取缓冲区,而不必意识到缓冲区由同一数组的两个非连续部分组成。
有没有更好的方法来对循环缓冲区进行排序?
IEnumerable<T>
的数据,对其调用orderby方法,然后根据结果生成一个新的缓冲区吗? - Servy