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());
}
}
}










