C++程序 将数组循环旋转一个位置
在C++编程中,经常需要对数组进行旋转操作。将数组循环旋转一个位置是非常基础和常见的操作,下面我们就来介绍一下如何在C++中实现这个操作。
问题描述
将一个长度为n的数组循环右移k个位置,即把数组的最后k个元素移到前面来,而把前面n-k个元素移到后面。例如,对数组 {1,2,3,4,5},循环右移2个位置后得到{4,5,1,2,3}。
思路分析
实现将数组循环旋转一个位置的C++程序,可采用以下步骤:
- 将k对数组长度n取余,得到不用重复移动的移位次数。
- 将n-1到n-k的元素全部翻转,即将最后k个元素移到数组前面。
- 将0到n-k-1的元素全部翻转,即将前面n-k个元素移到数组后面。
- 对整个数组进行翻转,得到最终结果。
下面我们将借助示例代码来更好地理解这个思路。
代码实现
#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个元素翻转,再整个数组翻转,就可以完美实现了。