// Helene Martin, CSE 143 // Shows the merge sort algorithm we discussed in an array of ints in a Queue of String. // Because Queues have different properties than arrays, the code is a little different // but the algorithm is the same. import java.util.*; public class QueueSorting { // Sorts the given queue using the merge sort algorithm // Post: list is in sorted (nondecreasing) order public static void sort(Queue list) { if (list.size() > 1) { Queue left = new LinkedList(); Queue right = new LinkedList(); int size1 = list.size() / 2; int size2 = list.size() - size1; for (int i = 0; i < size1; i++) { left.add(list.remove()); } for (int i = 0; i < size2; i++) { right.add(list.remove()); } sort(left); sort(right); mergeInto(list, left, right); } } // Merges list1 and list2 into a result queue. // Pre : result is empty; list1 is sorted; list2 is sorted // Post: list1 is empty; list2 is empty public static void mergeInto(Queue result, Queue list1, Queue list2) { while (!list1.isEmpty() && !list2.isEmpty()) { if (list1.peek().compareTo(list2.peek()) <= 0) result.add(list1.remove()); else result.add(list2.remove()); } while (!list1.isEmpty()) { result.add(list1.remove()); } while (!list2.isEmpty()) { result.add(list2.remove()); } } }