Interviewer may ask you this question if you have more than 3 years of experience in java development. So lets have a look, how to sort a stack using merge sort?
Lets see sample input and output for better understanding:
Algorithm
For this we will follow these below two steps,
1. Break the stack into two parts by using two temporary stack.
2. When only one element remains on a Stack, Merge it.
Lets have a look on the program,
Lets see sample input and output for better understanding:
Algorithm
For this we will follow these below two steps,
1. Break the stack into two parts by using two temporary stack.
2. When only one element remains on a Stack, Merge it.
Lets have a look on the program,
package com.codebyakram; import java.util.Stack; public class SortStack { public static void main(String args[]) { Stack stack = new Stack(); stack.push(5); stack.push(9); stack.push(4); stack.push(1); stack.push(2); stack.push(-1); sort(stack); System.out.println(stack); } private static void sort(Stack stack) { Stack s1 = new Stack(); Stack s2 = new Stack(); while (stack.size() != 0) { if (stack.size() % 2 == 0) { s1.push(stack.pop()); } else { s2.push(stack.pop()); } } if (s1.size() > 1) { sort(s1); } if (s2.size() > 1) { sort(s2); } merge(s1, s2, stack); } private static void merge(Stack s1, Stack s2, Stack stack) { Stack mergedStack = new Stack(); while (!s1.isEmpty() && !s2.isEmpty()) { if ((Integer) s1.peek() < (Integer) s2.peek()) { mergedStack.push(s2.pop()); } else { mergedStack.push(s1.pop()); } } while (!s1.isEmpty()) { mergedStack.push(s1.pop()); } while (!s2.isEmpty()) { mergedStack.push(s2.pop()); } while (!mergedStack.isEmpty()) { stack.push(mergedStack.pop()); } } }