# 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}
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// CPP program to shuffle an array in ` `// the form of a1, b1, a2, b2,... ` `#include ` `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); ` `    ``rearrange(arr, n); ` `    ``for` `(``int` `i = 0; i < n; i++) ` `    ``cout << ``" "` `<< arr[i]; ` ` `  `} ` ` `  `// This code is contributed by Smitha Dinesh Semwal `

## Java

 `// 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]); ` `  ``} ` `} `

## Python3

 `# 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) `

## C#

 `// 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. `

## PHP

 ` 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) ` `?> `

Output:

```1 2 3 4 5 6
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

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 :

1

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