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
using System;
 
class GFG {
    /* Function to left rotate arr[]
    of size n by d */
    static void leftRotate(int[] arr, int d)
    {
 
        if (d == 0)
            return;
        int n = arr.Length;
          // 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 reverse arr[] from
    index start to end*/
    static void reverseArray(int[] arr, int start,
                             int end)
    {
        int temp;
        while (start < end) {
            temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            start++;
            end--;
        }
    }
 
    /*UTILITY FUNCTIONS*/
    /* function to print an array */
    static void printArray(int[] arr)
    {
        for (int i = 0; i < arr.Length; i++)
            Console.Write(arr[i] + " ");
    }
 
    // Driver code
    public static void Main()
    {
        int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
        int n = arr.Length;
        int d = 2;
 
        leftRotate(arr, d); // Rotate array by 2
        printArray(arr);
    }
}
 
// This code is contributed by Sam007

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 *