[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]

    {
     DR> Does anyone have a good routine to sort a string array into
     DR> alphabetical order - I really only know how to do a bubble
     DR> sort, and that's a bit slow for >1000 in the array...
     DR> Preferably written in standard Pascal, as I would like to
     DR> understand it,

       Here's the conventional QuickSort (which is also included in the full
    TP/BP packages as examples):
    }

    var T     : string;                                  { swap variable }
        GUESS : array[1..1000] of ^string;    { pointer array of strings }
    procedure L_HSORT (LEFT,RIGHT : word);             { Lo-Hi QuickSort }
    var LOWER,UPPER,MIDDLE : word;
        PIVOT              : string;
    begin
      LOWER := LEFT; UPPER := RIGHT; MIDDLE := (LEFT+RIGHT) div 2;
      PIVOT := GUESS[MIDDLE]^;
      repeat
        while GUESS[LOWER]^ < PIVOT do Inc(LOWER);
        while PIVOT < GUESS[UPPER]^ do Dec(UPPER);
        if LOWER <= UPPER then
          begin
            T := GUESS[LOWER]^; GUESS[LOWER]^ := GUESS[UPPER]^;
            GUESS[UPPER]^ := T; Inc (LOWER); Dec (UPPER);
          end;
      until LOWER > UPPER;
      if LEFT < UPPER then L_HSORT (LEFT, UPPER);
      if LOWER < RIGHT then L_HSORT (LOWER, RIGHT)
    end;                                                       { L_HSORT }

[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]