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 l and r where l is to print the array in increasing order and r to print the array in decreasing order. Keep a variable K 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:

C++

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


Java

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


Python 3

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


C#

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


PHP

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)



My Personal Notes arrow_drop_up

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.