Divida la array y agregue la primera parte al final

Hay una array dada y se divide desde una posición específica, se mueve la primera parte dividida de la array y luego se agrega al final de la array.
 

Split the array and add the first part to the end

Ejemplos: 

Input : arr[] = {12, 10, 5, 6, 52, 36}
            k = 2
Output : arr[] = {5, 6, 52, 36, 12, 10}
Explanation : here k is two so first two elements are splitted and they are added at the end of array

Input : arr[] = {3, 1, 2}
           k = 1
Output : arr[] = {1, 2, 3}
Explanation :here k is one  so first one  element  are splitted and it  is added at the end of array

Solución simple: rotaremos los elementos de la array uno por uno.

Implementación:

C

// CPP program to split array and move first
// part to end.
#include <stdio.h>
 
void splitArr(int arr[], int n, int k)
{
    for (int i = 0; i < k; i++) {
 
        // Rotate array by 1.
        int x = arr[0];
        for (int j = 0; j < n - 1; ++j)
            arr[j] = arr[j + 1];
        arr[n - 1] = x;
    }
}
 
// Driver code
int main()
{
    int arr[] = { 12, 10, 5, 6, 52, 36 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int position = 2;
 
    splitArr(arr, n, position);
 
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
 
    return 0;
}

C++

// CPP program to split array and move first
// part to end.
#include <iostream>
using namespace std;
 
void splitArr(int arr[], int n, int k)
{
    for (int i = 0; i < k; i++) {
 
        // Rotate array by 1.
        int x = arr[0];
        for (int j = 0; j < n - 1; ++j)
            arr[j] = arr[j + 1];
        arr[n - 1] = x;
    }
}
 
// Driver code
int main()
{
    int arr[] = { 12, 10, 5, 6, 52, 36 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int position = 2;
 
    splitArr(arr, n, position);
 
    for (int i = 0; i < n; ++i)
        cout <<" "<< arr[i];
 
    return 0;
}
 
// This code is contributed by shivanisinghss2110

Java

// Java program to split array and move first
// part to end.
 
import java.util.*;
import java.lang.*;
class GFG {
    public static void splitArr(int arr[], int n, int k)
    {
        for (int i = 0; i < k; i++) {
 
            // Rotate array by 1.
            int x = arr[0];
            for (int j = 0; j < n - 1; ++j)
                arr[j] = arr[j + 1];
            arr[n - 1] = x;
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 12, 10, 5, 6, 52, 36 };
        int n = arr.length;
        int position = 2;
 
        splitArr(arr, n, position);
 
        for (int i = 0; i < n; ++i)
            System.out.print(arr[i] + " ");
    }
}
 
// Code Contributed by Mohit Gupta_OMG <(0_o)>

Python3

# Python program to split array and move first
# part to end.
 
def splitArr(arr, n, k):
    for i in range(0, k):
        x = arr[0]
        for j in range(0, n-1):
            arr[j] = arr[j + 1]
         
        arr[n-1] = x
         
 
# main
arr = [12, 10, 5, 6, 52, 36]
n = len(arr)
position = 2
 
splitArr(arr, n, position)
 
for i in range(0, n):
    print(arr[i], end = ' ')
 
# Code Contributed by Mohit Gupta_OMG <(0_o)>  

C#

// C# program to split array
// and move first part to end.
using System;
 
class GFG {
     
    // Function to split array and
    // move first part to end
    public static void splitArr(int[] arr, int n,
                                int k)
    {
        for (int i = 0; i < k; i++)
        {
 
            // Rotate array by 1.
            int x = arr[0];
            for (int j = 0; j < n - 1; ++j)
                arr[j] = arr[j + 1];
            arr[n - 1] = x;
        }
    }
 
    // Driver code
    public static void Main()
    {
        int[] arr = {12, 10, 5, 6, 52, 36};
        int n = arr.Length;
        int position = 2;
        splitArr(arr, n, position);
 
        for (int i = 0; i < n; ++i)
            Console.Write(arr[i] + " ");
    }
}
 
// This code is contributed by Shrikant13.

PHP

<?php
// PHP program to split array
// and move first part to end.
 
function splitArr(&$arr, $n, $k)
{
    for ($i = 0; $i < $k; $i++)
    {
 
        // Rotate array by 1.
        $x = $arr[0];
        for ($j = 0; $j < $n - 1; ++$j)
            $arr[$j] = $arr[$j + 1];
        $arr[$n - 1] = $x;
    }
}
 
// Driver code
$arr = array(12, 10, 5, 6, 52, 36);
$n = sizeof($arr);
$position = 2;
 
splitArr($arr, n, $position);
 
for ($i = 0; $i < $n; ++$i)
    echo $arr[$i]." ";
 
// This code is contributed
// by ChitraNayal
?>

Javascript

<script>
 
// JavaScript program to split
// array and move first
// part to end.
 
function splitArr(arr, n, k){
    for (let i = 0; i < k; i++)
    {
        // Rotate array by 1.
        let x = arr[0];
        for (let j = 0; j < n - 1; ++j)
            arr[j] = arr[j + 1];
        arr[n - 1] = x;
    }
}
 
// Driver code
 
let arr = [ 12, 10, 5, 6, 52, 36 ];
let n = arr.length;
let position = 2;
splitArr(arr, n, position);
for (let i = 0; i < n; ++i)
    document.write(arr[i]+" ");
     
</script>
Producción

5 6 52 36 12 10 

Complejidad temporal: O(n).  
Complejidad del espacio : O(1)

Otro enfoque: otro enfoque es hacer una array temporal con el doble de tamaño y copiar nuestro elemento de array en una nueva array dos veces. Y luego copiar el elemento de la nueva array a nuestra array tomando la rotación como índice inicial hasta la longitud de nuestra array.

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

C++

// CPP program to split array and move first
// part to end.
#include <bits/stdc++.h>
using namespace std;
 
// Function to split array and
// move first part to end
void splitArr(int arr[], int length, int rotation)
{
    int tmp[length * 2] = {0};
 
    for(int i = 0; i < length; i++)
    {
        tmp[i] = arr[i];
        tmp[i + length] = arr[i];
    }
 
    for(int i = rotation; i < rotation + length; i++)
    {
        arr[i - rotation] = tmp[i];
    }
}
 
// Driver code
int main()
{
    int arr[] = { 12, 10, 5, 6, 52, 36 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int position = 2;
 
    splitArr(arr, n, position);
 
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
 
    return 0;
}
 
// This code is contributed by YashKhandelwal8

Java

// Java program to split array and move first
// part to end.
import java.util.*;
import java.lang.*;
class GFG {
     
    // Function to split array and
    // move first part to end
    public static void SplitAndAdd(int[] A,int length,int rotation){
         
        //make a temporary array with double the size
        int[] tmp = new int[length*2];
         
        // copy array element in to new array twice
        System.arraycopy(A, 0, tmp, 0, length);
        System.arraycopy(A, 0, tmp, length, length);
        for(int i=rotation;i<rotation+length;i++)
            A[i-rotation]=tmp[i];
    }
 
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 12, 10, 5, 6, 52, 36 };
        int n = arr.length;
        int position = 2;
 
        SplitAndAdd(arr, n, position);
 
        for (int i = 0; i < n; ++i)
            System.out.print(arr[i] + " ");
    }
}

Python3

# Python3 program to split array and
# move first part to end.
 
# Function to split array and
# move first part to end
def SplitAndAdd(A, length, rotation):
 
    # make a temporary array with double
    # the size and each index is initialized to 0
    tmp = [ 0 for i in range(length * 2)]
 
    # copy array element in to new array twice
    for i in range(length):
        tmp[i] = A[i]
        tmp[i + length] = A[i]
 
    for i in range(rotation,
                   rotation + length, 1):
        A[i - rotation] = tmp[i];
      
# Driver code
arr = [12, 10, 5, 6, 52, 36]
n = len(arr)
position = 2
SplitAndAdd(arr, n, position);
for i in range(n):
    print(arr[i], end = " ")
print()
 
# This code is contributed by SOUMYA SEN

C#

// C# program to split array
// and move first part to end.
using System;
 
class GFG
{
 
    // Function to split array and
    // move first part to end
    public static void SplitAndAdd(int[] A,
                                   int length,
                                   int rotation)
    {
 
        // make a temporary array with double the size
        int[] tmp = new int[length * 2];
 
        // copy array element in to new array twice
        Array.Copy(A, 0, tmp, 0, length);
        Array.Copy(A, 0, tmp, length, length);
        for (int i = rotation; i < rotation + length; i++)
        {
            A[i - rotation] = tmp[i];
        }
    }
 
    // Driver code
    public static void Main(string[] args)
    {
        int[] arr = new int[] {12, 10, 5, 6, 52, 36};
        int n = arr.Length;
        int position = 2;
 
        SplitAndAdd(arr, n, position);
 
        for (int i = 0; i < n; ++i)
        {
            Console.Write(arr[i] + " ");
        }
    }
}
 
// This code is contributed by kumar65

Javascript

<script>
// Javascript program to split
// array and move first
// part to end.
     
    // Function to split array and
    // move first part to end
    function SplitAndAdd(A,Length,rotation)
    {
        // make a temporary array
        // with double the size
        let tmp = new Array(Length*2);
        for(let i=0;i<tmp.length;i++)
        {
            tmp[i]=0;
        }
          
        // copy array element in to new array twice
         
        for(let i=0;i<Length;i++)
        {
            tmp[i] = A[i]
            tmp[i + Length] = A[i]
        }
         
        for(let i=rotation;i<rotation+Length;i++)
        {
            A[i - rotation] = tmp[i];
        }
         
    }
     
    // Driver code
    let arr=[12, 10, 5, 6, 52, 36];
    let n = arr.length;
    let position = 2;
    SplitAndAdd(arr, n, position);
     
    for (let i = 0; i < n; ++i)
        document.write(arr[i] + " ");
     
     
    // This code is contributed by avanitrachhadiya2155
     
</script>
Producción

5 6 52 36 12 10 

Complejidad temporal: O(n)
Complejidad espacial: O(2n)

Una solución O(n) eficiente se analiza en la siguiente publicación: Divida la array y agregue la primera parte al final | Conjunto 2
Se observa este problema, pero el problema de rotación de array y podemos aplicar los métodos optimizados de rotación de array O (n) aquí. 
Programa para rotación de  
arreglos Algoritmo de intercambio de bloques para rotación de arreglos
Algoritmo de inversión para rotación de arreglos  
Encuentre rápidamente múltiples rotaciones a la izquierda de un arreglo | Conjunto 1  
Imprime la rotación a la izquierda de la array en el tiempo O (n) y el espacio O (1)

Este artículo es una contribución de Aditya Ranjan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

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 *