//: c08:SortList.java // From Thinking in Java, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 1999 // Copyright notice in Copyright.txt // A generic sorting list package c08; import java.util.*; public class SortList extends ArrayList { private Compare compare; // To hold the callback public SortList(Compare comp) { compare = comp; } public void sort() { quickSort(0, size() - 1); } private void quickSort(int left, int right) { if(right > left) { Object o1 = get(right); int i = left - 1; int j = right; while(true) { while(compare.lessThan( get(++i), o1)) ; while(j > 0) if(compare.lessThanOrEqual( get(--j), o1)) break; // out of while if(i >= j) break; swap(i, j); } swap(i , right); quickSort(left, i-1); quickSort(i+1, right); } } private void swap(int loc1, int loc2) { Object tmp = get(loc1); set(loc1, get(loc2)); set(loc2, tmp); } } ///:~