Question :
Sorting a Stack using push,pop,isEmpty and peek.
Code :
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.