Shuffle 2n integers as a1-b1-a2-b2-a3-b3-..bn without using extra space

We have an array of the form {a0, a1, a2….., an, b0, b1, b2, …..bn} and our task is to rearrange the same in theform given below by using O(1) space-
{a0, b0, a1, b1, a2, b2………..an, bn}

Examples:

Input : arr[] = {1, 3, 5, 7, 2, 4, 6, 8}
Output : {1, 2, 3, 4, 5, 6, 7, 8}

Input : arr[] = {11, 13, 15, 12, 14, 16}
Output : {11, 12, 13, 14, 15, 16}

We have already discussed two approaches-

As we can see we have to transform the array so there must be an even size array.To rearrange the array we will start from the middle of the array and each time we will shift 1 element of the second half to left at it’s desired position. This algorithm will take O(n^2).

Algorithm-

1- Take the input array
2- If size is null or odd return
3- find the middle index of the array
4- While (midindex>0)
    set count = midindex and 
        swapindex = midindex
    while (count-->0){
      swap(swapindex+1, swapindedx)
      swapindex++
    }
    midindex--
5- End

Working-

array- 1 3 5 7 2 4 6 8
1st Loop- 1 2 3 5 7 4 6 8
2nd Loop- 1 2 3 4 5 7 6 8
3rd loop- 1 2 3 4 5 6 7 8

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to shuffle an array in
// the form of a1, b1, a2, b2,...
#include<iostream>
using namespace std;
  
// function to rearrange the array
void rearrange(int arr[], int n) 
{
  
    // if size is null or odd return because it
    // is not possible to rearrange
    if (arr == NULL || n % 2 == 1)
        return;
  
    // start from the middle index
    int currIdx = (n - 1) / 2;
  
    // each time we will set two elements from the 
    // start to the valid position by swapping
    while (currIdx > 0)
    {
        int count = currIdx, swapIdx = currIdx;
      
        while (count-- > 0) 
        {
            int temp = arr[swapIdx + 1];
            arr[swapIdx + 1] = arr[swapIdx];
            arr[swapIdx] = temp;
            swapIdx++;
        }
          
        currIdx--;
    }
}
  
// Driver Program
int main()
{
    int arr[] = {1, 3, 5, 2, 4, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
    rearrange(arr, n);
    for (int i = 0; i < n; i++)
    cout << " " << arr[i];
  
}
  
// This code is contributed by Smitha Dinesh Semwal

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to shuffle an array in
// the form of a1, b1, a2, b2,...
import java.io.*;
  
class GFG {
  
  // function to rearrange the array
  public static void rearrange(int[] arr) {
  
    // if size is null or odd return because it
    // is not possible to rearrange
    if (arr == null || arr.length % 2 == 1)
      return;
  
    // start from the middle index
    int currIdx = (arr.length - 1) / 2;
  
    // each time we will set two elements from the 
    // start to the valid position by swapping
    while (currIdx > 0) {
      int count = currIdx, swapIdx = currIdx;
  
      while (count-- > 0) {
        int temp = arr[swapIdx + 1];
        arr[swapIdx + 1] = arr[swapIdx];
        arr[swapIdx] = temp;
        swapIdx++;
      }
      currIdx--;
    }
  }
  
  public static void main(String[] args) {
    int arr[] = {1, 3, 5, 2, 4, 6};
    rearrange(arr);
    for (int i = 0; i < arr.length; i++)
      System.out.print(" " + arr[i]);
  }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to shuffle 
# an array in the form 
# of a1, b1, a2, b2,...
  
arr = [1, 3, 5, 2, 4, 6]
  
# function to
# rearrange the array
def rearrange(n) :
  
    global arr
      
    # if size is null or 
    # odd return because 
    # it is not possible 
    # to rearrange
    if (n % 2 == 1) :
        return
  
    # start from the
    # middle index
    currIdx = int((n - 1) / 2)
  
    # each time we will set 
    # two elements from the 
    # start to the valid 
    # position by swapping
    while (currIdx > 0) :
      
        count = currIdx
        swapIdx = currIdx
      
        while (count > 0) : 
          
            temp = arr[swapIdx + 1]
            arr[swapIdx + 1] = arr[swapIdx]
            arr[swapIdx] = temp
            swapIdx = swapIdx + 1
            count = count - 1    
          
        currIdx = currIdx - 1
  
# Driver Code
n = len(arr)
rearrange(n)
for i in range(0, n) :
    print ("{} " . format(arr[i]), 
                        end = "")
      
# This code is contributed by 
# Manish Shaw(manishshaw1)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to shuffle an array in
// the form of a1, b1, a2, b2,...
using System;
  
class GFG {
      
    // function to rearrange the array
    public static void rearrange(int[] arr)
    {
      
        // if size is null or odd return 
        // because it is not possible to
        // rearrange
        if (arr == null || arr.Length % 2 == 1)
            return;
      
        // start from the middle index
        int currIdx = (arr.Length - 1) / 2;
      
        // each time we will set two elements
        // from the start to the valid position 
        // by swapping
        while (currIdx > 0) {
            int count = currIdx, swapIdx = currIdx;
          
            while (count-- > 0) {
                int temp = arr[swapIdx + 1];
                arr[swapIdx + 1] = arr[swapIdx];
                arr[swapIdx] = temp;
                swapIdx++;
            }
              
            currIdx--;
        }
    }
      
    // Driver Program
    public static void Main() {
          
        int []arr = {1, 3, 5, 2, 4, 6};
          
        rearrange(arr);
          
        for (int i = 0; i < arr.Length; i++)
            Console.Write(" " + arr[i]);
    }
}
  
// This code is contributed by vt_m.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to shuffle 
// an array in the form 
// of a1, b1, a2, b2,...
  
// function to
// rearrange the array
function rearrange(&$arr, $n
{
    // if size is null or 
    // odd return because 
    // it is not possible 
    // to rearrange
    if ($arr == NULL ||
        $n % 2 == 1)
        return;
  
    // start from the
    // middle index
    $currIdx = intval(($n - 1) / 2);
  
    // each time we will set 
    // two elements from the 
    // start to the valid 
    // position by swapping
    while ($currIdx > 0)
    {
        $count = $currIdx;
        $swapIdx = $currIdx;
      
        while ($count-- > 0) 
        {
            $temp = $arr[$swapIdx + 1];
            $arr[$swapIdx + 1] = $arr[$swapIdx];
            $arr[$swapIdx] = $temp;
            $swapIdx++;
        }
          
        $currIdx--;
    }
}
  
// Driver Code
$arr = array(1, 3, 5, 2, 4, 6);
$n = count($arr);
rearrange($arr, $n);
for ($i = 0; $i < $n; $i++)
    echo ($arr[$i] . " ");
      
// This code is contributed by 
// Manish Shaw(manishshaw1)
?>

chevron_right



Output:

1 2 3 4 5 6


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : manishshaw1



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.