public static void shellsort(Comparable[] theArray, int n) {
int loc;
  Comparable nextItem;
  for (int h = n/2; h > 0; h = h/2) {
    for (int unsorted = h; unsorted < n; ++unsorted) {
      nextItem = theArray[unsorted];
      loc = unsorted;
      while ((loc >= h) && 
             (theArray[loc-h].compareTo(nextItem) > 0)) {
        theArray[loc] = theArray[loc-h];
        loc = loc - h;
      }  // end while
    theArray[loc] = nextItem;
    }  // end for unsorted
  }  // end for h
}  // end shellsort