1: static void quicksort(int A[], int low, int high) {
   2:     int pivot;
   3:     
   4:     if (low < high) {
   5:         pivot = partition(A, low, high);
   6:         quicksort(A, low, pivot-1);
   7:         quicksort(A, pivot+1, high);
   8:     }
   9: }
  10: 
  11: 
  12: static int partition(Elem A[], int low, int high) {
  13:     Elem pivot;
  14:     Elem tmp;
  15:     int max = high;
  16:     int mid = (low + high) / 2;
  17:     
  18:     tmp = A[mid];
  19:     A[mid] = A[high];
  20:     A[high] = tmp;
  21:     pivot = A[high];
  22:     low--;
  23:     do {
  24:         while(A[++low].key() < pivot.key());
  25:         while((low < high) && (A[--high].key() > pivot.key()));
  26:         tmp = A[low];
  27:         A[low] = A[high];
  28:         A[high] = tmp;
  29:     } while (low < high);
  30:     tmp = A[low];
  31:     A[low] = A[max];
  32:     A[max] = tmp;
  33:     return low;
  34: }
  35: