Program to print an array in Pendulum Arrangement
Last Updated :
16 Feb, 2023
Write a program to input a list of integers in an array and arrange them in a way similar to the to-and-fro movement of a Pendulum.
- The minimum element out of the list of integers, must come in center position of array.
- The number in the ascending order next to the minimum, goes to the right, the next higher number goes to the left of minimum number and it continues.
- As higher numbers are reached, one goes to one side in a to-and-fro manner similar to that of a Pendulum.
Examples:
Input : 1 3 2 5 4
Output :5 3 1 2 4
Explanation:
The minimum element is 1, so it is moved to the middle.
The next higher element 2 is moved to the right of the
middle element while the next higher element 3 is
moved to the left of the middle element and
this process is continued.
Input : 11 12 31 14 5
Output :31 12 5 11 14
The idea is to sort the array first. Once the array is sorted, use an auxiliary array to store elements one by one.
Implementation:
C++
// C++ program for pendulum arrangement of numbers
#include <bits/stdc++.h>
using namespace std;
// Prints pendulum arrangement of arr[]
void pendulumArrangement(int arr[], int n)
{
// sorting the elements
sort(arr, arr+n);
// Auxiliary array to store output
int op[n];
// calculating the middle index
int mid = (n-1)/2;
// storing the minimum element in the middle
// i is index for output array and j is for
// input array.
int j = 1, i = 1;
op[mid] = arr[0];
for (i = 1; i <= mid; i++)
{
op[mid+i] = arr[j++];
op[mid-i] = arr[j++];
}
// adjustment for when no. of elements is even
if (n%2 == 0)
op[mid+i] = arr[j];
// Printing the pendulum arrangement
cout << "Pendulum arrangement:" << endl;
for (i = 0 ; i < n; i++)
cout << op[i] << " ";
cout << endl;
}
// Driver function
int main()
{
//input Array
int arr[] = {14, 6, 19, 21, 12};
// calculating the length of array A
int n = sizeof(arr)/sizeof(arr[0]);
// calling pendulum function
pendulumArrangement(arr, n);
return 0;
}
Java
// Java program for pendulum arrangement of numbers
import java.util.Arrays;
class Test
{
// Prints pendulum arrangement of arr[]
static void pendulumArrangement(int arr[], int n)
{
// sorting the elements
Arrays.sort(arr);
// Auxiliary array to store output
int op[] = new int[n];
// calculating the middle index
int mid = (n-1)/2;
// storing the minimum element in the middle
// i is index for output array and j is for
// input array.
int j = 1, i = 1;
op[mid] = arr[0];
for (i = 1; i <= mid; i++)
{
op[mid+i] = arr[j++];
op[mid-i] = arr[j++];
}
// adjustment for when no. of elements is even
if (n%2 == 0)
op[mid+i] = arr[j];
// Printing the pendulum arrangement
System.out.println("Pendulum arrangement:");
for (i = 0 ; i < n; i++)
System.out.print(op[i] + " ");
System.out.println();
}
// Driver method
public static void main(String[] args)
{
//input Array
int arr[] = {14, 6, 19, 21, 12};
// calling pendulum function
pendulumArrangement(arr, arr.length);
}
}
Python3
# Python 3 program for pendulum
# arrangement of numbers
# Prints pendulum arrangement of arr[]
def pendulumArrangement(arr, n):
# sorting the elements
arr.sort()
# Auxiliary array to store output
op = [0] * n
# calculating the middle index
mid = int((n-1)/2)
# storing the minimum
# element in the middle
# i is index for output
# array and j is for
# input array.
j = 1
i = 1
op[mid] = arr[0]
for i in range(1,mid+1):
op[mid+i] = arr[j]
j+=1
op[mid-i] = arr[j]
j+=1
# adjustment for when no.
# of elements is even
if (int(n%2) == 0):
op[mid+i] = arr[j]
# Printing the pendulum arrangement
print("Pendulum arrangement:")
for i in range(0,n):
print(op[i],end=" ")
# Driver function
# input Array
arr = [14, 6, 19, 21, 12]
# calculating the length of array A
n = len(arr)
# calling pendulum function
pendulumArrangement(arr, n)
# This code is contributed by
# Smitha Dinesh Semwal
C#
// C# program for pendulum
// arrangement of numbers
using System;
class Test {
// Prints pendulum arrangement of arr[]
static void pendulumArrangement(int []arr,
int n)
{
// sorting the elements
Array.Sort(arr);
// Auxiliary array to store output
int []op = new int[n];
// calculating the middle index
int mid = (n - 1) / 2;
// storing the minimum element in
// the middle i is index for output
// array and j is for input array.
int j = 1, i = 1;
op[mid] = arr[0];
for (i = 1; i <= mid; i++)
{
op[mid + i] = arr[j++];
op[mid - i] = arr[j++];
}
// adjustment for when no.
// of elements is even
if (n % 2 == 0)
op[mid + i] = arr[j];
// Printing the pendulum arrangement
Console.Write("Pendulum arrangement:");
for (i = 0 ; i < n; i++)
Console.Write(op[i] + " ");
Console.WriteLine();
}
// Driver code
public static void Main()
{
//input Array
int []arr = {14, 6, 19, 21, 12};
// calling pendulum function
pendulumArrangement(arr, arr.Length);
}
}
// This code is contributed by Nitin Mittal.
PHP
<?php
// PHP program for pendulum
// arrangement of numbers
// Prints pendulam arrangement of arr[]
function pendulumArrangement($arr, $n)
{
// sorting the elements
sort($arr, $n);
sort($arr);
// Auxiliary array to
// store output
$op[$n] = NULL;
// calculating the
// middle index
$mid = floor(($n - 1) / 2);
// storing the minimum
// element in the middle
// i is index for output
// array and j is for
// input array.
$j = 1;
$i = 1;
$op[$mid] = $arr[0];
for ($i = 1; $i <= $mid; $i++)
{
$op[$mid + $i] = $arr[$j++];
$op[$mid - $i] = $arr[$j++];
}
// adjustment for when no.
// of elements is even
if ($n % 2 == 0)
$op[$mid + $i] = $arr[$j];
// Printing the pendulum
// arrangement
echo "Pendulum arrangement:" ;
for ($i = 0 ; $i < $n; $i++)
echo $op[$i], " ";
echo "\n";
}
// Driver Code
//input Array
$arr = array(14, 6, 19, 21, 12);
// calculating the length
// of array A
$n = sizeof($arr);
// calling pendulum function
pendulumArrangement($arr, $n);
// This code is contributed by nitin mittal.
?>
JavaScript
<script>
// JavaScript program for pendulum
// arrangement of numbers
// Prints pendulam arrangement of arr[]
function pendulumArrangement(arr, n)
{
// sorting the elements
arr.sort(function (a, b) {
return a - b;
});
// Auxiliary array to store output
var op = [...Array(n)];
// calculating the middle index
var mid = parseInt((n - 1) / 2);
// storing the minimum element in the middle
// i is index for output array and j is for
// input array.
var j = 1,
i = 1;
op[mid] = arr[0];
for (i = 1; i <= mid; i++) {
op[mid + i] = arr[j++];
op[mid - i] = arr[j++];
}
// adjustment for when no. of elements is even
if (n % 2 == 0) op[mid + i] = arr[j];
// Printing the pendulum arrangement
document.write("Pendulum arrangement:<br>");
for (i = 0; i < n; i++)
document.write(op[i] + " ");
document.write("<br>");
}
// Driver function
//input Array
var arr = [14, 6, 19, 21, 12];
// calculating the length of array A
var n = arr.length;
// calling pendulum function
pendulumArrangement(arr, n);
</script>
OutputPendulum arrangement:
21 14 6 12 19
Time Complexity: O(n*log(n)) where n is the size of the array.
Auxiliary Space: O(n)