Rearrange an array in maximum minimum form | Set 1

Given a sorted array of positive integers, rearrange the array alternately i.e first element should be maximum value, second minimum value, third second max, fourth second min and so on.

Examples:

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

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

Expected time complexity: O(n).

The idea is to use an auxiliary array. We maintain two pointers one to leftmost or smallest element and other to rightmost or largest element. We more both pointers toward each other and alternatively copy elements at these pointers to an auxiliary array. Finally, we copy auxiliary array back to the original array.

Below image is a dry run of the above approach:

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to rearrange an array in minimum
// maximum form
#include <bits/stdc++.h>
using namespace std;
  
// Prints max at first position, min at second position
// second max at third position, second min at fourth
// position and so on.
void rearrange(int arr[], int n)
{
    // Auxiliary array to hold modified array
    int temp[n];
  
    // Indexes of smallest and largest elements
    // from remaining array.
    int small=0, large=n-1;
  
    // To indicate whether we need to copy rmaining
    // largest or remaining smallest at next position
    int flag = true;
  
    // Store result in temp[]
    for (int i=0; i<n; i++)
    {
        if (flag)
            temp[i] = arr[large--];
        else
            temp[i] = arr[small++];
  
        flag = !flag;
    }
  
    // Copy temp[] to arr[]
    for (int i=0; i<n; i++)
        arr[i] = temp[i];
}
  
// Driver program to test above function
int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6};
    int n = sizeof(arr)/sizeof(arr[0]);
  
    cout << "Original Arrayn";
    for (int i=0; i<n; i++)
        cout << arr[i] << " ";
  
    rearrange(arr, n);
  
    cout << "nModified Arrayn";
    for (int i=0; i<n; i++)
        cout << arr[i] << " ";
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to rearrange an array in minimum
// maximum form
  
import java.util.Arrays;
  
public class GFG
{
    // Prints max at first position, min at second position
    // second max at third position, second min at fourth
    // position and so on.
    static void rearrange(int[] arr, int n)
    {
        // Auxiliary array to hold modified array
        int temp[] = new int[n];
      
        // Indexes of smallest and largest elements
        // from remaining array.
        int small=0, large=n-1;
      
        // To indicate whether we need to copy rmaining
        // largest or remaining smallest at next position
        boolean flag = true;
      
        // Store result in temp[]
        for (int i=0; i<n; i++)
        {
            if (flag)
                temp[i] = arr[large--];
            else
                temp[i] = arr[small++];
      
            flag = !flag;
        }
      
        // Copy temp[] to arr[]
        arr = temp.clone();
    }
  
    // Driver method to test the above function
    public static void main(String[] args) 
    {
        int arr[] = new int[]{1, 2, 3, 4, 5, 6};
          
        System.out.println("Original Array ");
        System.out.println(Arrays.toString(arr));
          
        rearrange(arr,arr.length);
          
        System.out.println("Modified Array ");
        System.out.println(Arrays.toString(arr));
      
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to rearrange an array in minimum
# maximum form
  
# Prints max at first position, min at second position
# second max at third position, second min at fourth
# position and so on.
def rearrange(arr, n):
    # Auxiliary array to hold modified array
    temp = n*[None]
  
    # Indexes of smallest and largest elements
    # from remaining array.
    small,large =0,n-1
  
    # To indicate whether we need to copy rmaining
    # largest or remaining smallest at next position
    flag = True
  
    # Store result in temp[]
    for i in range(n):
        if flag is True:
            temp[i] = arr[large]
            large -= 1
        else:
            temp[i] = arr[small]
            small += 1
  
        flag = bool(1-flag)
  
    # Copy temp[] to arr[]
    for i in range(n):
        arr[i] = temp[i]
    return arr
  
# Driver program to test above function
arr = [1, 2, 3, 4, 5, 6]
n = len(arr)
print("Original Array")
print(arr)
print("Modified Array")
print(rearrange(arr, n))
  
# This code is contributed by Pratik Chhajer

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to rearrange 
// an array in minimum 
// maximum form
using System;
  
class GFG
{
  
// Prints max at first position, 
// min at second position second 
// max at third position, second 
// min at fourth position and so on.
static void rearrage(int[] arr, 
                     int n)
{
    // Auxiliary array to 
    // hold modified array
    int []temp = new int[n];
  
    // Indexes of smallest 
    // and largest elements
    // from remaining array.
    int small = 0, large = n - 1;
  
    // To indicate whether we 
    // need to copy rmaining
    // largest or remaining 
    // smallest at next position
    bool flag = true;
  
    // Store result in temp[]
    for (int i = 0; i < n; i++)
    {
        if (flag)
            temp[i] = arr[large--];
        else
            temp[i] = arr[small++];
  
        flag = !flag;
    }
  
    // Copy temp[] to arr[]
    for (int i = 0; i < n; i++)
        arr[i] = temp[i];
}
  
// Driver Code
static void Main()
{
    int[] arr = {1, 2, 3, 4, 
                 5, 6};
  
    Console.WriteLine("Original Array");
    for(int i = 0; i < arr.Length; i++)
        Console.Write(arr[i] + " ");
  
    rearrage(arr, arr.Length);     
  
    Console.WriteLine("\nModified Array");
    for(int i = 0; i < arr.Length; i++)
        Console.Write(arr[i] + " ");
}
}
  
// This code is contributed
// by Sam007

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to rearrange an array in 
// minimum-maximum form
  
// Prints max at first position, min at 
// second position second max at third 
// position, second min at fourth
// position and so on.
function rearrange(&$arr, $n)
{
    // Auxiliary array to hold modified array
    $temp = array();
  
    // Indexes of smallest and largest elements
    // from remaining array.
    $small = 0;
    $large = $n - 1;
  
    // To indicate whether we need to copy 
    // remaining largest or remaining smallest
    // at next position
    $flag = true;
  
    // Store result in temp[]
    for ($i = 0; $i < $n; $i++)
    {
        if ($flag)
            $temp[$i] = $arr[$large--];
        else
            $temp[$i] = $arr[$small++];
  
        $flag = !$flag;
    }
  
    // Copy temp[] to arr[]
    for ($i = 0; $i < $n; $i++)
        $arr[$i] = $temp[$i];
}
  
// Driver Code
$arr = array(1, 2, 3, 4, 5, 6);
$n = count($arr);
  
echo "Original Arrayn\n";
for ($i = 0; $i < $n; $i++)
    echo $arr[$i] . " ";
  
rearrange($arr, $n);
  
echo "\nModified Arrayn\n";
for ($i = 0; $i < $n; $i++)
    echo $arr[$i] . " ";
      
// This code is contributed by
// Rajput-Ji
?>

chevron_right



Output:

Original Array
1 2 3 4 5 6
Modified Array
6 1 5 2 4 3 

Time Complexity: O(n)
Auxiliary Space: O(n)

Exercise: How to solve this problem if extra space is not allowed?

Rearrange an array in maximum minimum form | Set 2 (O(1) extra space)

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up

Improved By : Sam007, Rajput-Ji



Article Tags :
Practice Tags :


3


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