00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 public class Quicksort
00013 {
00014
00015
00016
00017
00018 private Object a[];
00019
00020
00021
00022
00023
00024
00025
00026 public Quicksort(Object array[])
00027 {
00028 a = array;
00029 }
00030
00031
00032
00033
00034
00035
00036 public void sort(java.util.Comparator comp)
00037 {
00038 sort(0, a.length-1, comp);
00039 }
00040
00041
00042
00043
00044
00045
00046 public void sort(int low, int high, java.util.Comparator comp)
00047 {
00048 if( low >= high )
00049 return;
00050
00051 Object pivot = a[(low + high)/2];
00052
00053
00054
00055
00056 int i = low-1;
00057 int j = high+1;
00058
00059 for( ; ; )
00060 {
00061 do { i++; } while( comp.compare(a[i], pivot) < 0 );
00062 do { j--; } while( comp.compare(a[j], pivot) > 0 );
00063
00064 if( i >= j ) break;
00065
00066 swap(i, j);
00067 }
00068
00069 sort(low, i-1, comp);
00070 sort(j+1, high, comp);
00071 }
00072
00073
00074
00075
00076
00077
00078 public void swap(int i, int j)
00079 {
00080 Object temp = a[i];
00081 a[i] = a[j];
00082 a[j] = temp;
00083 }
00084 }