Lexicographical smallest alternate Array

13 Jun, 2022
Given an array arr[] of distinct elements, the task is to rearrange the array such that it is lexicographically smallest and of the form arr[0] > arr[1] < arr[2] > arr[3] < ...Examples:  
Input: arr[] = {3, 2, 1, 4, 5} Output: 2 1 4 3 5Input: arr[] = {10, 22} Output: 22 10  
 
Approach: In order to get the lexicographically smallest array, we can choose the minimum element as the first element but that will not satisfy the condition where the first element has to be strictly greater than the second element. Now, the second-best choice is to choose the second minimum from the array and the only element which is smaller than it is the smallest element which will be the second element of the array. Apply the same process for the rest of the array elements, choose the second minimum of the remaining elements and then choose the minimum for every two consecutive positions which can be obtained by first sorting the given array then swapping every two consecutive elements.Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to print the// contents of an arrayvoid printArr(int arr[], int n){    for (int i = 0; i < n; i++) {        cout << arr[i] << " ";    }} // Function to find the lexicographically// smallest alternating arrayvoid smallestArr(int arr[], int n){     // Sort the array    sort(arr, arr + n);     // Swap every two consecutive elements    for (int i = 0; i + 1 < n; i = i + 2) {        swap(arr[i], arr[i + 1]);    }     // Print the re-arranged array    printArr(arr, n);} // Driver codeint main(){    int arr[] = { 3, 2, 1, 4, 5 };    int n = sizeof(arr) / sizeof(arr[0]);     smallestArr(arr, n);     return 0;}
// Java implementation of the approachimport java.util.Arrays; class GFG{     // Function to print the    // contents of an array    static void printArr(int[] arr, int n)    {        for (int i = 0; i < n; i++)            System.out.print(arr[i] + " ");    }     // Function to find the lexicographically    // smallest alternating array    static void smallestArr(int[] arr, int n)    {         // Sort the array        Arrays.sort(arr);         // Swap every two consecutive elements        for (int i = 0; i + 1 < n; i = i + 2)        {            int temp = arr[i];            arr[i] = arr[i + 1];            arr[i + 1] = temp;        }         // Print the re-arranged array        printArr(arr, n);    }     // Driver code    public static void main(String[] args)    {        int[] arr = { 3, 2, 1, 4, 5 };        int n = arr.length;        smallestArr(arr, n);    }} // This code is contributed by// sanjeev2552
# Python3 implementation of the approach # Function to print the# contents of an arraydef printArr(arr, n):    for i in range(n):        print(arr[i], end = " "); # Function to find the lexicographically# smallest alternating arraydef smallestArr(arr, n):     # Sort the array    arr.sort();     # Swap every two consecutive elements    for i in range(0, n - 1, 2):         temp = arr[i];        arr[i] = arr[i + 1];        arr[i + 1] = temp;     # Print the re-arranged array    printArr(arr, n); # Driver codeif __name__ == '__main__':     arr = [ 3, 2, 1, 4, 5 ];    n = len(arr);    smallestArr(arr, n);     # This code contributed by Rajput-Ji
// C# implementation of the approachusing System;     class GFG{     // Function to print the    // contents of an array    static void printArr(int[] arr, int n)    {        for (int i = 0; i < n; i++)            Console.Write(arr[i] + " ");    }     // Function to find the lexicographically    // smallest alternating array    static void smallestArr(int[] arr, int n)    {         // Sort the array        Array.Sort(arr);         // Swap every two consecutive elements        for (int i = 0; i + 1 < n; i = i + 2)        {            int temp = arr[i];            arr[i] = arr[i + 1];            arr[i + 1] = temp;        }         // Print the re-arranged array        printArr(arr, n);    }     // Driver code    public static void Main(String[] args)    {        int[] arr = { 3, 2, 1, 4, 5 };        int n = arr.Length;        smallestArr(arr, n);    }} // This code is contributed by 29AjayKumar
<?php// PHP implementation of the approach // Function to print the// contents of an arrayfunction printArr($arr, $n){    for ($i = 0; $i < $n; $i++)    {        echo $arr[$i];        echo " ";    }} // Function to find the lexicographically// smallest alternating arrayfunction smallestArr($arr, $n){     // Sort the array    sort($arr);     // Swap every two consecutive elements    for ($i = 0; $i + 1 < $n; $i = $i + 2)    {        $temp = $arr[$i];        $arr[$i] = $arr[$i + 1];        $arr[$i + 1] = $temp;    }     // Print the re-arranged array    printArr($arr, $n);} // Driver code$arr = array( 3, 2, 1, 4, 5 );$n = count($arr); smallestArr($arr, $n); // This code is contributed by Naman_Garg.?>
// javascript implementation of the approach     // Function to print the    // contents of an array    function printArr(arr, n)    {        for (var i = 0; i < n; i++)            document.write(arr[i] + " ");    }       // Function to find the lexicographically    // smallest alternating array         function smallestArr( arr,  n)    {           // Sort the array               arr.sort();           // Swap every two consecutive elements        for (var i = 0; i + 1 < n; i = i + 2)        {            var temp = arr[i];            arr[i] = arr[i + 1];            arr[i + 1] = temp;        }           // Print the re-arranged array        printArr(arr, n);    }       // Driver code        var arr = [ 3, 2, 1, 4, 5 ] ;        var n = arr.length;        smallestArr(arr, n); // This code is contributed by bunnyram19.
2 1 4 3 5
 
Time Complexity: O(nlogn)
Auxiliary Space: O(1)
sanjeev2552
Naman_Garg
29AjayKumar
Rajput-Ji
nidhi_biet
bunnyram19
ajaymakvana
lexicographic-ordering
Arrays
Misc
Misc
Arrays
Misc
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Window Sliding Technique
Search, insert and delete in an unsorted array
Chocolate Distribution Problem
What is Data Structure: Types, Classifications and Applications
Overview of Data Structures | Set 1 (Linear Data Structures)
vector::push_back() and vector::pop_back() in C++ STL
Top 10 algorithms in Interview Questions
Virtualization In Cloud Computing and Types
How to write Regular Expressions?