Question :
Sorting a Stack using push,pop,isEmpty and peek.
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package SortingTechniques; import java.util.Arrays; import java.util.Stack; /** * Created with IntelliJ IDEA. * User: aniket * Date: 19/2/14 * Time: 11:02 AM */ public class StackSort { public void sortStack(Stack<Integer> stack){ int no = stack.pop(); if (stack.size() != 1 ){ sortStack(stack); } insert(stack,no); } private void insert(Stack<Integer> stack, int no){ if (stack.size() == 0 ){ stack.push(no); } else { int newPeakedNo = stack.peek(); if (no >= newPeakedNo){ stack.push(no); } else { int newPoppedNo = stack.pop(); insert(stack, no); stack.push(newPoppedNo); } } } public static void main(String args[]){ Stack<Integer> stack = new Stack<>(); stack.push( 5 ); stack.push( 4 ); stack.push( 3 ); stack.push( 2 ); stack.push( 1 ); System.out.println( "Stack Before Sort : " + Arrays.toString(stack.toArray())); new StackSort().sortStack(stack); System.out.println( "Stack After Sort : " + Arrays.toString(stack.toArray())); } } |
Output :
Stack Before Sort : [5, 4, 3, 2, 1]
Stack After Sort : [1, 2, 3, 4, 5]
Stack After Sort : [1, 2, 3, 4, 5]
Note :
A similar question was solver in previous post about how to reverse a Stack in Java. It has similar logic.