Sorting array using Stacks

• Difficulty Level : Easy
• Last Updated : 12 Aug, 2022

Given an array of elements, the task is to sort these elements using a stack.

Prerequisites: Stacks

Examples:

Input :  8 5 7 1 9 12 10
Output : 1 5 7 8 9 10 12
Explanation :
Output is sorted element set

Input :  7 4 10 20 2 5 9 1
Output : 1 2 4 5 7 9 10 20

We basically use Sort a stack using a temporary stack. Then we put sorted stack elements back to the array.

Implementation:

C++

 // C++ program to sort an array using stack#include using namespace std; // This function return the sorted stackstack sortStack(stack input){    stack tmpStack;     while (!input.empty())    {        // pop out the first element        int tmp = input.top();        input.pop();         // while temporary stack is not empty        // and top of stack is smaller than temp        while (!tmpStack.empty() &&                tmpStack.top() < tmp)        {            // pop from temporary stack and            // push it to the input stack            input.push(tmpStack.top());            tmpStack.pop();        }         // push temp in temporary of stack        tmpStack.push(tmp);    }     return tmpStack;} void sortArrayUsingStacks(int arr[], int n){    // Push array elements to stack    stack input;    for (int i=0; i tmpStack = sortStack(input);     // Put stack elements in arrp[]    for (int i=0; i

Java

 // Java program to sort an// array using stackimport java.io.*;import java.util.*; class GFG{    // This function return    // the sorted stack    static Stack sortStack(Stack input)    {        Stack tmpStack =                       new Stack();             while (!input.empty())        {            // pop out the            // first element            int tmp = input.peek();            input.pop();                 // while temporary stack is            // not empty and top of stack            // is smaller than temp            while (!tmpStack.empty() &&                    tmpStack.peek() < tmp)            {                // pop from temporary                // stack and push it                // to the input stack                input.push(tmpStack.peek());                tmpStack.pop();            }                 // push temp in            // temporary of stack            tmpStack.push(tmp);        }             return tmpStack;    }         static void sortArrayUsingStacks(int []arr,                                     int n)    {        // push array elements        // to stack        Stack input =                       new Stack();        for (int i = 0; i < n; i++)            input.push(arr[i]);             // Sort the temporary stack        Stack tmpStack =                       sortStack(input);             // Put stack elements        // in arrp[]        for (int i = 0; i < n; i++)        {            arr[i] = tmpStack.peek();            tmpStack.pop();        }    }         // Driver Code    public static void main(String args[])    {        int []arr = {10, 5, 15, 45};        int n = arr.length;             sortArrayUsingStacks(arr, n);             for (int i = 0; i < n; i++)            System.out.print(arr[i] + " ");    }} // This code is contributed by// Manish Shaw(manishshaw1)

Python3

 # Python3 program to sort an array using stack # This function return the sorted stackdef sortStack(input):    tmpStack = []    while (len(input) > 0):             # pop out the first element        tmp = input[-1]        input.pop()         # while temporary stack is not empty        # and top of stack is smaller than temp        while (len(tmpStack) > 0 and tmpStack[-1] < tmp):                     # pop from temporary stack and            # append it to the input stack            input.append(tmpStack[-1])            tmpStack.pop()                 # append temp in temporary of stack        tmpStack.append(tmp)         return tmpStack def sortArrayUsingStacks(arr, n):     # append array elements to stack    input = []    i = 0    while ( i < n ):        input.append(arr[i])        i = i + 1             # Sort the temporary stack    tmpStack = sortStack(input)    i = 0         # Put stack elements in arrp[]    while (i < n):        arr[i] = tmpStack[-1]        tmpStack.pop()        i = i + 1             return arr # Driver codearr = [10, 5, 15, 45]n = len(arr) arr = sortArrayUsingStacks(arr, n)i = 0 while (i < n):    print(arr[i] ,end= " ")    i = i + 1 # This code is contributed by Arnab Kundu

C#

 // C# program to sort an// array using stackusing System;using System.Collections.Generic; class GFG{    // This function return    // the sorted stack    static Stack sortStack(Stack input)    {        Stack tmpStack = new Stack();             while (input.Count != 0)        {            // pop out the            // first element            int tmp = input.Peek();            input.Pop();                 // while temporary stack is            // not empty and top of stack            // is smaller than temp            while (tmpStack.Count != 0 &&                    tmpStack.Peek() < tmp)            {                // pop from temporary                // stack and push it                // to the input stack                input.Push(tmpStack.Peek());                tmpStack.Pop();            }                 // push temp in            // temporary of stack            tmpStack.Push(tmp);        }             return tmpStack;    }         static void sortArrayUsingStacks(int []arr,                                     int n)    {        // Push array elements        // to stack        Stack input = new Stack();        for (int i = 0; i tmpStack = sortStack(input);             // Put stack elements in arrp[]        for (int i = 0; i < n; i++)        {            arr[i] = tmpStack.Peek();            tmpStack.Pop();        }    }         // Driver Code    static void Main()    {        int []arr = new int[] {10, 5,                               15, 45};        int n = arr.Length;             sortArrayUsingStacks(arr, n);             for (int i = 0; i < n; i++)        Console.Write(arr[i] + " ");    }} // This code is contributed by// Manish Shaw(manishshaw1)

Javascript



Output

5 10 15 45

Complexity Analysis:

• Time Complexity: O(n*n).
• Auxiliary Space: O(n) since auxiliary array is being used to create stack.

My Personal Notes arrow_drop_up