/////// MySort.java /////// class MySort { static int partition(TextLines tx, int l, int r) { int i=l, j=r; String piv; // choose middle element as pivot tx.swap((i+j)/2,j); piv = tx.getLine(j).toString(); while (i < j) { while (sortKey.cmp(tx.getLine(i).toString(), piv) <= 0 && i < j) i++; while (j > i && sortKey.cmp(tx.getLine(j).toString(), piv) >= 0) j--; if (i < j) tx.swap(i++,j); } if (i != r) tx.swap(i,r); return(i); } static void quicksort(TextLines tx, int l, int r) { int k; if ( l >= r || l < 0 || r < 0) return; k = partition (tx, l, r); quicksort(tx, l, k-1); quicksort(tx, k+1, r); } public static void main(String[] args) { if (args.length > 2) { System.err.println ("Usage: Mysort [key_position [delimiter]]"); System.exit(1); } int i = 0; if (args.length >= 1) i = Integer.valueOf(args[0]).intValue(); // key position if (args.length == 2) delim = args[1]; // set delimiter sortKey = new SortKey(i, delim); TextLines tx = new TextLines(256); tx.input(System.in); quicksort(tx,0,tx.length()-1); tx.output(System.out); } static String delim = "\t \r"; static SortKey sortKey; }