旋转阵列向右而不是向左

Rotate array to right instead of left

本文关键字:阵列 旋转      更新时间:2023-10-16

我有一些代码,可以向左旋转一个数字数组,但是我需要将其旋转向右侧。还有其他在线代码可以向右旋转数组,但是该代码只能在数组中间旋转数字。

我尝试以不同的方式减少循环&并更改其初始化的位置,但似乎没有以正确的方式旋转。

预期输出:如果数组是此{1, 2, 3, 4, 5, 6, 7}。然后应该看起来像: {7, 1, 2, 3, 4, 5, 6}

当前输出:{2, 3, 4, 5, 6, 7, 1}

#include <iostream>
using namespace std;
/*Function to left Rotate arr[] of size n by 1*/
void leftRotatebyOne(int arr[], int n);
/*Function to left rotate arr[] of size n by d*/
void leftRotate(int arr[], int d, int n)
{
  int i;
  for (i = 0; i < d; i++)
    leftRotatebyOne(arr, n);
}
void leftRotatebyOne(int arr[], int n)
{
  int i, temp;
  temp = arr[0];
  for (i = 0; i < n-1; i++)
     arr[i] = arr[i+1];
  arr[i] = temp;
}
/* utility function to print an array */
void printArray(int arr[], int size)
{
  int i;
  for(i = 0; i < size; i++)
    cout << arr[i] << " ";

}
/* Driver program to test above functions */
int main()
{
   int arr[] = {1, 2, 3, 4, 5, 6, 7};
   printArray(arr, 7);   
   leftRotate(arr, 1, 7);
   cout << "___" << endl;
   printArray(arr, 7);
   getchar();
   return 0;
}

leftRotateByOne是这里的关键函数。其他人可以保持不变。看看它在做什么,最好用笔和纸来跟踪操作:

  1. 保留第一个元素的副本。
  2. 将所有元素移至"左"(即,索引元素少(,注意不要以后覆盖任何您需要的东西。
  3. 将第一个元素放在最后一个位置。

因此您需要相反:

  1. 保留最后一个元素的副本。
  2. 将所有元素移至"右"(即,索引元素再过一个(,请注意不要以后覆盖任何您需要的东西。
  3. 首先将最后一个元素放在。

例如:

void rightRotatebyOne(int arr[], int n)
{
  int i, last;
  last = arr[n-1];
  for (i = n-1; i > 0; i--)
     arr[i] = arr[i-1];
  arr[0] = last;
}