home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / TP-UTIL.ARK / QUIKSORT.SRC < prev    next >
Text File  |  1986-01-06  |  1KB  |  54 lines

  1. PROCEDURE QUIKSORT(VAR SORTBUF : KEYARRAY;
  2.                        RECS    : INTEGER);
  3.  
  4.  
  5. PROCEDURE INT_SWAP(VAR RR,SS : KEYREC);
  6.  
  7. VAR T : KEYREC;
  8.  
  9. BEGIN
  10.   T := RR;
  11.   RR := SS;
  12.   SS := T
  13. END;
  14.  
  15.  
  16. PROCEDURE DOSORT(LO, HI : INTEGER);
  17.  
  18. VAR I,J   : INTEGER;
  19.     PIVOT : KEYREC;
  20.  
  21. BEGIN
  22.   { Can't sort if LO is greater than or equal to HI... }
  23.   IF LO < HI THEN
  24.     BEGIN
  25.       I := LO;
  26.       J := HI;
  27.       PIVOT := SORTBUF[J];
  28.       REPEAT
  29.         WHILE (I < J) AND (SORTBUF[I].KEY <= PIVOT.KEY) DO I := I + 1;
  30.         WHILE (J > I) AND (SORTBUF[J].KEY >= PIVOT.KEY) DO J := J - 1;
  31.         IF I < J THEN INT_SWAP(SORTBUF[I],SORTBUF[J]);
  32.       UNTIL I >= J;
  33.       INT_SWAP(SORTBUF[I],SORTBUF[HI]);
  34.       IF (I - LO < HI - I) THEN
  35.         BEGIN
  36.           DOSORT(LO,I-1);    { Recursive calls to DOSORT! }
  37.           DOSORT(I+1,HI)
  38.         END
  39.       ELSE
  40.         BEGIN
  41.           DOSORT(I+1,HI);    { Recursive calls to DOSORT! }
  42.           DOSORT(LO,I-1)
  43.         END
  44.     END
  45. END;
  46.  
  47.  
  48. BEGIN
  49.   DOSORT(1,RECS);
  50. END;  { QUIKSORT }
  51.  CHR(186);
  52.       LINE_CROSS := CHR(206);
  53.       T_DOWN     := CHR(203);
  54.       T_UP