Programa C++ para el algoritmo de inversión para la rotación de arrays

Escribe una función rotar(arr[], d, n) que gire arr[] de tamaño n por d elementos. 
Ejemplo : 

Input :  arr[] = [1, 2, 3, 4, 5, 6, 7]
         d = 2
Output : arr[] = [3, 4, 5, 6, 7, 1, 2] 

Array

La rotación de la array anterior por 2 hará que la array
 

ArrayRotation1

Los primeros 3 métodos para rotar una array por d elementos se han discutido en esta publicación. 
Método 4 (El algoritmo de inversión):
Algoritmo: 
 

rotate(arr[], d, n)
  reverse(arr[], 1, d) ;
  reverse(arr[], d + 1, n);
  reverse(arr[], 1, n);

Sean AB las dos partes del arreglo de entrada donde A = arr[0..d-1] y B = arr[d..n-1]. La idea del algoritmo es: 
 

  • Invierta A para obtener ArB, donde Ar es el reverso de A.
  • Invierta B para obtener ArBr, donde Br es el reverso de B.
  • Invierta todo para obtener (ArBr) r = BA.

Ejemplo: 
Sea la array arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2 y n = 7 
A = [1, 2] y B = [3, 4, 5, 6, 7] 
 

  • A inversa, obtenemos ArB = [2, 1, 3, 4, 5, 6, 7]
  • Invertir B, obtenemos ArBr = [2, 1, 7, 6, 5, 4, 3]
  • Invertir todo, obtenemos (ArBr)r = [3, 4, 5, 6, 7, 1, 2]

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ program for reversal algorithm
// of array rotation
#include <bits/stdc++.h>
using namespace std;
 
/*Function to reverse arr[] from index start to end*/
void reverseArray(int arr[], int start, int end)
{
    while (start < end) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}
 
/* Function to left rotate arr[] of size n by d */
void leftRotate(int arr[], int d, int n)
{
    if (d == 0)
        return;
    // in case the rotating factor is
    // greater than array length
    d = d % n;
 
    reverseArray(arr, 0, d - 1);
    reverseArray(arr, d, n - 1);
    reverseArray(arr, 0, n - 1);
}
 
// Function to print an array
void printArray(int arr[], int size)
{
    for (int 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 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int d = 2;
 
    // Function calling
    leftRotate(arr, d, n);
    printArray(arr, n);
 
    return 0;
}

Producción : 

3 4 5 6 7 1 2

Complejidad de tiempo: O(N), donde N representa el tamaño de la array dada.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.
 

Consulte el artículo completo sobre el algoritmo de inversión para la rotación de array para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *