C++程序 将数组循环旋转一个位置

C++程序 将数组循环旋转一个位置

C++编程中,经常需要对数组进行旋转操作。将数组循环旋转一个位置是非常基础和常见的操作,下面我们就来介绍一下如何在C++中实现这个操作。

问题描述

将一个长度为n的数组循环右移k个位置,即把数组的最后k个元素移到前面来,而把前面n-k个元素移到后面。例如,对数组 {1,2,3,4,5},循环右移2个位置后得到{4,5,1,2,3}。

思路分析

实现将数组循环旋转一个位置的C++程序,可采用以下步骤:

  1. 将k对数组长度n取余,得到不用重复移动的移位次数。
  2. 将n-1到n-k的元素全部翻转,即将最后k个元素移到数组前面。
  3. 将0到n-k-1的元素全部翻转,即将前面n-k个元素移到数组后面。
  4. 对整个数组进行翻转,得到最终结果。

下面我们将借助示例代码来更好地理解这个思路。

代码实现

#include <iostream>
#include <algorithm>
using namespace std;

void reverse(int nums[], int start, int end){ 
    while(start < end){
        swap(nums[start], nums[end]);
        start++;
        end--;
    }
}

void rotate(int nums[], int n, int k) {
    k %= n; // 得到不用重复移动的移位次数
    reverse(nums, n-k, n-1); // 将最后k个元素全部翻转
    reverse(nums, 0, n-k-1); // 将前面n-k个元素全部翻转
    reverse(nums, 0, n-1); // 将整个数组翻转
}

int main() {
    int nums[] = {1, 2, 3, 4, 5};
    int n = sizeof(nums) / sizeof(int), k = 2;
    rotate(nums, n, k); // 循环右移2个位置
    for(int i = 0; i < n; i++){
        cout << nums[i] << ' ';
    }
    return 0;
}

以上是将数组循环旋转一个位置的C++程序。该程序将数组循环右移两个位置,即将最后两个元素移到数组前面,得到结果为{4,5,1,2,3}。运行结果如下:

4 5 1 2 3

结论

通过以上示例代码及说明,我们可以看到,实现将数组循环旋转一个位置的C++程序,非常简单。只需要按照步骤,将最后k个元素和前面n-k个元素翻转,再整个数组翻转,就可以完美实现了。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例