阵列之间的开关元件

时间:2011-11-07 20:16:11

标签: algorithm

我有一个n个元素的数组,我想编写一个函数来在数组之间切换元素,如下所示:

1 2 3 ---> 3 1 2 ---> 2 3 1 ---> 1 2 3

我想不出一个简单的算法来做到这一点。请帮忙。这不是作业。

2 个答案:

答案 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;