我有一个n个元素的数组,我想编写一个函数来在数组之间切换元素,如下所示:
1 2 3 ---> 3 1 2 ---> 2 3 1 ---> 1 2 3
我想不出一个简单的算法来做到这一点。请帮忙。这不是作业。
答案 0 :(得分:1)
使用队列而不是列表。将每个步骤的出队项目排入队列。
另一种方法是使用循环缓冲区。只需保持数组不变,并指向第一个元素,在每一步上移动指针。分两个阶段读取阵列。 1.从指针到结尾。 2.从头到尾。
第三种选择是逐个交换元素。
int tmp = arr[0];
for(int i = 0; i < arr.Length - 1; i++)
{
arr[i] = arr[i+1];
}
arr[arr.Length - 1] = tmp;
答案 1 :(得分:0)
你只想旋转数组?
// Rotate left
int temp = a[0];
for (int i = 0; i < a.Length-1; ++i)
a[i] = a[i+1];
a[a.Length-1] = temp;
// Rotate right
int temp = a[a.Length-1];
for (int i = a.Length-1; i > 0; --i)
a[i] = a[i-1];
a[0] = temp;