Programa Javascript 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: 
 

Javascript

<script>
      // JavaScript program for reversal algorithm
      // of array rotation
 
      /*Function to reverse arr[] from index start to end*/
      function reverseArray(arr, start, end) {
        while (start < end) {
          var temp = arr[start];
          arr[start] = arr[end];
          arr[end] = temp;
          start++;
          end--;
        }
      }
 
      /* Function to left rotate arr[] of size n by d */
      function leftRotate(arr, d, 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
      function printArray(arr, size)
      {
        for (var i = 0; i < size; i++) document.write(arr[i] + " ");
      }
 
      /* Driver program to test above functions */
 
      var arr = [1, 2, 3, 4, 5, 6, 7];
      var n = arr.length;
      var d = 2;
 
      // Function calling
      leftRotate(arr, d, n);
      printArray(arr, n);
       
      // This code is contributed by rdtank.
    </script>

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 *