多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 数组右旋转的逆向算法 > 原文: [https://www.geeksforgeeks.org/reversal-algorithm-right-rotation-array/](https://www.geeksforgeeks.org/reversal-algorithm-right-rotation-array/) 给定一个数组,将其右旋转 k 个元素。 ![](https://img.kancloud.cn/07/ed/07edb97a3fd73f5b6d90e7d8580af38a_436x74.png) 在`K = 3`旋转后 ![](https://img.kancloud.cn/7b/a1/7ba1163b3e095fd47cebce3969637fc9_442x93.png) **示例**: ``` Input: arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} k = 3 Output: 8 9 10 1 2 3 4 5 6 7 Input: arr[] = {121, 232, 33, 43 ,5} k = 2 Output: 43 5 121 232 33 ``` **注意**:在下面的解决方案中,假定 k 小于或等于 n。 我们可以通过修改`k = k % n`来轻松修改解决方案以处理更大的 k 值 **算法**: ``` rotate(arr[], d, n) reverseArray(arr[], 0, n-1) ; reverse(arr[], 0, d-1); reverse(arr[], d, n-1); ``` 下面是上述方法的实现: ## C++ ```cpp // C++ program for right rotation of  // an array (Reversal Algorithm) #include <bits/stdc++.h> /*Function to reverse arr[]  from index start to end*/ void reverseArray(int arr[], int start,                             int end) {     while (start < end)     {         std::swap(arr[start], arr[end]);         start++;         end--;     } } /* Function to right rotate arr[] of size n by d */ void rightRotate(int arr[], int d, int n) {     reverseArray(arr, 0, n-1);     reverseArray(arr, 0, d-1);     reverseArray(arr, d, n-1); } /* function to print an array */ void printArray(int arr[], int size) {     for (int i = 0; i < size; i++)         std::cout << arr[i] << " "; } // driver code int main() {     int arr[] = {1, 2, 3, 4, 5,                  6, 7, 8, 9, 10};     int n = sizeof(arr)/sizeof(arr[0]);     int k = 3;     rightRotate(arr, k, n);     printArray(arr, n);     return 0; }  ```