在不使用额外空间的情况下将 2n 个整数随机播放为 a1-b1-a2-b2-a3-b3-..bn
我们有一个 {a0, a1, a2....., an, b0, b1, b2, .....bn} 形式的数组,我们的任务是使用 O(1) 空间重新排列下面给出的形式 -
{a0,b0,a1,b1,a2,b2……..an,bn}
例子:
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}
我们已经讨论了两种方法——
- https://www.geeksforgeeks.org/shuffle-2n-integers-format-a1-b1-a2-b2-a3-b3-bn-without-using-extra-space/
- https://www.geeksforgeeks.org/shuffle-array-a1-b1-a2-b2-a3-b3-bn-without-using-extra-space/
正如我们所看到的,我们必须转换数组,所以必须有一个偶数大小的数组。要重新排列数组,我们将从数组的中间开始,每次我们将后半部分的 1 个元素向左移动到所需的位置.该算法将花费 O(n^2)。
算法-
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
在职的-
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++
// C++ 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[0]);
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)
?>
Javascript
输出:
1 2 3 4 5 6