import java.io.*; public class SortThread extends Thread { private PrintStream out = null; private DataInputStream in = null; public SortThread(PrintStream out, DataInputStream in) { this.out = out; this.in = in; } public void run() { int MAXWORDS = 50; if (out != null && in != null) { try { String[] listOfWords = new String[MAXWORDS]; int numwords = 0; while ((listOfWords[numwords] = in.readLine()) != null) numwords++; quicksort(listOfWords, 0, numwords-1); for (int i = 0; i < numwords; i++) out.println(listOfWords[i]); out.close(); } catch (IOException e) { System.err.println("SortThread run: " + e); } } } protected void finalize() throws IOException { if (out != null) { out.close(); out = null; } if (in != null) { in.close(); in = null; } } private static void quicksort(String[] a, int lo0, int hi0) { int lo = lo0; int hi = hi0; if (lo >= hi) return; String mid = a[(lo + hi) / 2]; while (lo < hi) { while (lo 0) hi--; if (lo < hi) { String T = a[lo]; a[lo] = a[hi]; a[hi] = T; } } if (hi < lo) { int T = hi; hi = lo; lo = T; } quicksort(a, lo0, lo); quicksort(a, lo == lo0 ? lo+1 : lo, hi0); } }