如何让我的圆形阵列旋转更高效?我在这thread中读到了一个很好的排序算法,但它不适用于我所需要的,因为在数组末尾有空格排列到中间。如何让阵列旋转更高效?
旋转功能需要适用于左旋和右旋。并非阵列中的每个空间都将被填充。
void Quack::rotate(int r)
{
if(r > 0) //if r is positive, rotate left
{
for(int i = 0; i < r; i++)
items[(qBack + i) % qCapacity] = items[(qFront + i) % qCapacity];
//move items in array
}
else if(r < 0) //if r is negative, rotate right
{
for(int i = 0; i < (r * -1); i++)
items[(qFront - i - 1) % qCapacity] =
items[(qBack - i - 1) % qCapacity];
//move items in array
}
//if r = 0, nothing happens
//rotate front and back by r
qFront = (qFront + r) % qCapacity;
qBack = (qBack + r) % qCapacity;
}
这不一定能帮助你(取决于你试图解决的更高级别的问题),但是你可以通过保持一个起始偏移量来“旋转”一个数组,并且只需调整算法中的循环。让他们开始读取该偏移量,读到最后,然后再次从头开始读取,直到该偏移量。 –
有一个不错的版本的旋转完成三个反转:颠倒左边的位,然后右边的位,然后整个阵列。但这可能会或可能不会更快。 –