/** * Sort the elements of sequence S in nondecreasing order according * to comparator c, using the merge-sort algorithm. **/ public static void mergeSort (Sequence S, Comparator c) { int n = S.size(); // a sequence with 0 or 1 element is already sorted if (n < 2) return; // divide int i = n; Sequence S1 = new NodeSequence(); do { // move the first n/2 elements to S1 S1.insertLast(S.remove(S.first())); i--; } while (i > n/2); Sequence S2 = new NodeSequence(); do { // move the remaining n/2 elements to S2 S2.insertLast(S.remove(S.first())); i--; } while (i > 0); // sequence S is now empty // recur mergeSort(S1,c); mergeSort(S2,c); //conquer merge(S1,S2,c,S); }