📜  C ++程序用于程序将数组循环旋转一

📅  最后修改于: 2022-05-13 01:55:31.620000             🧑  作者: Mango

C ++程序用于程序将数组循环旋转一

给定一个数组,将数组顺时针循环旋转一圈。

例子:

Input:  arr[] = {1, 2, 3, 4, 5}
Output: arr[] = {5, 1, 2, 3, 4}

以下是步骤。
1) 将最后一个元素存储在变量 x 中。
2) 将所有元素向前移动一位。
3) 用 x 替换数组的第一个元素。

C++
// C++ code for program 
// to cyclically rotate
// an array by one
# include 
using namespace std;
  
void rotate(int arr[], int n)
{
    int x = arr[n - 1], i;
    for (i = n - 1; i > 0; i--)
    arr[i] = arr[i - 1]; 
    arr[0] = x;
}
  
// Driver code
int main() 
{
    int arr[] = {1, 2, 3, 4, 5}, i;
    int n = sizeof(arr) / 
            sizeof(arr[0]);
  
    cout << "Given array is 
";
    for (i = 0; i < n; i++)
        cout << arr[i] << ' ';
  
    rotate(arr, n);
  
    cout << "
Rotated array is
";
    for (i = 0; i < n; i++)
        cout << arr[i] << ' ';
  
    return 0;
}
  
// This code is contributed by jit_t


C++
#include 
using namespace std;
  
void rotate(int arr[], int n)
{
    int i = 0, j = n-1; // i and j pointing to first and last element respectively
    while(i != j){
    swap(arr[i], arr[j]);
    i++;
    }
}
  
// Driver code
int main() 
{
    int arr[] = {1, 2, 3, 4, 5}, i;
    int n = sizeof(arr) / 
            sizeof(arr[0]);
  
    cout << "Given array is \n";
    for (i = 0; i < n; i++)
        cout << arr[i] << " ";
  
    rotate(arr, n);
  
    cout << "\nRotated array is\n";
    for (i = 0; i < n; i++)
        cout << arr[i] << " ";
  
    return 0;
}


输出
Given array is 
1 2 3 4 5 

Rotated array is
5 1 2 3 4 

时间复杂度:O(n) 因为我们需要遍历所有元素
辅助空间:O(1)
上述问题也可以通过反转算法来解决。

另一种方法:

我们可以使用两个指针,比如ij ,它们分别指向数组的第一个最后一个元素。正如我们所知,在循环旋转中,我们会将最后一个元素放在第一个元素并向前移动其余元素,因此开始交换 arr[i] 和 arr[j] 并保持 j 固定并且 i 向 j 移动。重复直到 i 不等于 j。

C++

#include 
using namespace std;
  
void rotate(int arr[], int n)
{
    int i = 0, j = n-1; // i and j pointing to first and last element respectively
    while(i != j){
    swap(arr[i], arr[j]);
    i++;
    }
}
  
// Driver code
int main() 
{
    int arr[] = {1, 2, 3, 4, 5}, i;
    int n = sizeof(arr) / 
            sizeof(arr[0]);
  
    cout << "Given array is \n";
    for (i = 0; i < n; i++)
        cout << arr[i] << " ";
  
    rotate(arr, n);
  
    cout << "\nRotated array is\n";
    for (i = 0; i < n; i++)
        cout << arr[i] << " ";
  
    return 0;
}
输出
Given array is 
1 2 3 4 5 
Rotated array is
5 1 2 3 4 


有关详细信息,请参阅有关将数组循环旋转 1 的完整文章!