
/*
 * SORT.C
 *
 * a QuickSort is used for speed, simplicity, and small code size.
 *
 */


QuickSort(av, n)
char *av[];
short n;
{
   short b;

   if (n > 0) {
      b = QSplit(av, n);
      QuickSort(av, b);
      QuickSort(av+b+1, n - b - 1);
   }
}


/*
 * QSplit called as a second routine so I don't waste stack on QuickSort's
 * recursivness.
 */

QSplit(av, n)
register char *av[];
short n;
{
   register short i, b;
   register char *element, *scr;

   element = av[0];
   for (b = 0, i = 1; i < n; ++i) {
      if (strcmp(av[i], element) < 0) {
         ++b;
         scr = av[i]; av[i] = av[b]; av[b] = scr;
      }
   }
   scr = av[0]; av[0] = av[b]; av[b] = scr;
   return (b);
}
