Print array elements in alternatively increasing and decreasing order

Given an array of N elements. The task is to print the array elements in such a way that first two elements are in increasing order, next 3 in decreasing order, next 4 in increasing order and so on.

Examples:

Input : arr = {2, 6, 2, 4, 0, 1, 4, 8, 2, 0, 0, 5}
Output : 0 0 8 6 5 0 1 2 2 4 4 2 2 2

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

Source :Oracle Interview experience set 52



The idea is to use 2 pointer technique. First sort the array in increasing order and maintain two pointers and where is to print the array in increasing order and to print the array in decreasing order. Keep a variable to specify the number of elements to be printed in an iteration and a variable flag to switch between printing in increasing order and decreasing order alternatively.

Below is the implementation of above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print array elements in
// alternative increasing and decreasing
// order
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to print array elements in
// alternative increasing and decreasing
// order
void printArray(int arr[], int n)
{
    // First sort the array in increasing order
    sort(arr, arr + n);
  
    int l = 0, r = n - 1, flag = 0, i;
  
    // start with 2 elements in
    // increasing order
    int k = 2;
  
    // till all the elements are not printed
    while (l <= r) {
        // printing the elements in
        // increasing order
        if (flag == 0) {
            for (i = l; i < l + k && i <= r; i++)
                cout << arr[i] << " ";
  
            flag = 1;
            l = i;
        }
        else // printing the elements in
        // decreasing order
        {
            for (i = r; i > r - k && i >= l; i--)
                cout << arr[i] << " ";
  
            flag = 0;
            r = i;
        }
  
        // increasing the number of elements
        // to printed in next iteration
        k++;
    }
}
  
// Driver Code
int main()
{
    int n = 6;
  
    int arr[] = { 1, 2, 3, 4, 5, 6 };
  
    printArray(arr, n);
  
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print array elements in
// alternative increasing and decreasing
// order
import java.util.*;
class Solution
{
   
// Function to print array elements in
// alternative increasing and decreasing
// order
static void printArray(int arr[], int n)
{
    // First sort the array in increasing order
    Arrays.sort(arr);
   
    int l = 0, r = n - 1, flag = 0, i;
   
    // start with 2 elements in
    // increasing order
    int k = 2;
   
    // till all the elements are not printed
    while (l <= r) {
        // printing the elements in
        // increasing order
        if (flag == 0) {
            for (i = l; i < l + k && i <= r; i++)
                System.out.print(arr[i] + " ");
   
            flag = 1;
            l = i;
        }
        else // printing the elements in
        // decreasing order
        {
            for (i = r; i > r - k && i >= l; i--)
                System.out.print(arr[i] + " ");
   
            flag = 0;
            r = i;
        }
   
        // increasing the number of elements
        // to printed in next iteration
        k++;
    }
}
   
// Driver Code
public static void main(String args[])
{
    int n = 6;
   
    int arr[] = { 1, 2, 3, 4, 5, 6 };
   
    printArray(arr, n);
   
  
}
  
}
//contributed by Arnab Kundu
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to print array elements 
# in alternative increasing and decreasing
# order
  
# Function to print array elements in
# alternative increasing and decreasing
# order
def printArray(arr, n):
  
    # First sort the array in
    # increasing order
    arr.sort()
  
    l = 0
    r = n - 1
    flag = 0
      
    # start with 2 elements in
    # increasing order
    k = 2
  
    # till all the elements are not printed
    while (l <= r) :
          
        # printing the elements in
        # increasing order
        if (flag == 0):
            i = l
            while i < l + k and i <= r:
                print(arr[i], end = " ")
                i += 1
  
            flag = 1
            l = i
          
        else:     # printing the elements in
                 # decreasing order
            i = r
            while i > r - k and i >= l:
                print(arr[i], end = " ")
                i -= 1
  
            flag = 0
            r = i
  
        # increasing the number of elements
        # to printed in next iteration
        k += 1
  
# Driver Code
if __name__ == "__main__":
      
    n = 6
    arr = [ 1, 2, 3, 4, 5, 6
    printArray(arr, n)
  
# This code is contributed by ita_c
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print array elements in 
// alternative increasing and decreasing 
// order 
using System;
   
class GFG{
       
// Function to print array elements in 
// alternative increasing and decreasing 
// order 
static void printArray(int []arr, int n) 
      
    // First sort the array
    // in increasing order 
    Array.Sort(arr); 
   
    int l = 0, r = n - 1, flag = 0, i; 
   
    // start with 2 elements in 
    // increasing order 
    int k = 2; 
   
    // till all the elements
    // are not printed 
    while (l <= r) { 
          
        // printing the elements in 
        // increasing order 
        if (flag == 0) {
              
            for (i = l; i < l + k && i <= r; i++) 
                    Console.Write(arr[i] + " "); 
   
            flag = 1; 
            l = i; 
        
        else 
          
        // printing the elements in 
        // decreasing order 
        
            for (i = r; i > r - k && i >= l; i--) 
                Console.Write(arr[i] + " "); 
   
            flag = 0; 
            r = i; 
        
   
        // increasing the number of elements 
        // to printed in next iteration 
        k++; 
    
   
// Driver Code 
static public void Main ()
{
           
    int n = 6; 
    int []arr = { 1, 2, 3, 4, 5, 6 }; 
    printArray(arr, n); 
  
  
// This code is contributed by Sach_Code
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to print array elements in 
// alternative increasing and decreasing 
// order 
  
// Function to print array elements in 
// alternative increasing and decreasing 
// order 
function printArray($arr, $n
    // First sort the array in 
    // increasing order 
    sort($arr); 
  
    $l = 0;
    $r = $n - 1;
    $flag = 0;
  
    // start with 2 elements in 
    // increasing order 
    $k = 2; 
  
    // till all the elements are
    // not printed 
    while ($l <= $r
    
        // printing the elements in 
        // increasing order 
        if ($flag == 0) 
        
            for ($i = $l
                 $i < $l + $k && 
                 $i <= $r; $i++) 
                echo $arr[$i] , " "
  
            $flag = 1; 
            $l = $i
        
        else // printing the elements in 
             // decreasing order 
        
            for ($i = $r;
                 $i > $r - $k && 
                 $i >= $l; $i--) 
                echo $arr[$i] , " "
  
            $flag = 0; 
            $r = $i
        
  
        // increasing the number of elements 
        // to printed in next iteration 
        $k++; 
    
  
// Driver Code 
$n = 6; 
$arr = array( 1, 2, 3, 4, 5, 6 ); 
  
printArray($arr, $n); 
  
// This code is contributed by jit_t
?>
chevron_right

Output:
1 2 6 5 4 3

Time Complexity : O(nlogn)

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.




Recommended Posts:


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.



Article Tags :
Practice Tags :