home *** CD-ROM | disk | FTP | other *** search
/ Big Blue Disk 19 / bbd19.zip / --------.111 (.txt) < prev    next >
Turbo Pascal Chain module  |  1988-01-13  |  9KB  |  65 lines

  1.   Compares: 
  2.      Swaps: 
  3. Assignments 
  4.  END OF DEMO. ! 
  5. return.chn
  6. %Enter a speed from 1 to 9 (1=slowest)
  7. %or 0 to single step thru program     
  8.  Press spacebar to continue... 
  9.  Press ESC to quit...          
  10. ' Press 1-9 to change speeds, 0 to pause
  11. Bad variable number.
  12. (----------------------------------------
  13. '---------------------------------------
  14. Right
  15. Pivot
  16. @Press  Space to continue, ESC to quit, 0-9 to change speeds, or 
  17.  to scroll.
  18. 8PROGRAM Quick1( Input, Output );   { Quicksort program }
  19. CONST Size = 20;
  20. &TYPE List = ARRAY[1..Size] OF INTEGER;
  21. &  L: List;      { Array to be sorted }
  22.   K: INTEGER;
  23. %PROCEDURE Swap( VAR X, Y : INTEGER );
  24. VAR Temp:INTEGER;
  25. BEGIN
  26.   Temp := X;
  27.       X := Y;
  28.   Y := Temp
  29. END;     { Swap }
  30. PROCEDURE QSort(
  31. ,      Left,    { Position of first element }
  32. +      Right:   { Position of last element }
  33.        INTEGER
  34.       );
  35.   Up, Down, Pivot: INTEGER;
  36. BEGIN
  37. "              { Partition values }
  38.   Up := Left;
  39.   Down := Right;
  40. 9  Pivot := L[ (Left+Right) div 2 ];   { Set pivot value }
  41.   REPEAT
  42. 6    WHILE L[Up] < Pivot  DO           { Scan forward }
  43.       Up := Up+1;
  44. 7    WHILE Pivot < L[Down]  DO         { Scan backward }
  45.       Down := Down-1;
  46. ?    IF  Up <= Down  THEN              { Swap & continue scans }
  47.       BEGIN
  48.         SWAP( L[Up], L[Down] );
  49.         Up := Up+1;
  50.         Down := Down-1
  51.           END
  52. C  UNTIL  Up > Down;                   { until scan pointers cross }
  53. *              { Sort each partition part }
  54.   IF Left < Down
  55. 2    THEN  QSort( Left, Down );  { Sort left part }
  56.   IF Up < Right
  57. 2    THEN  QSort( Up, Right );  { Sort right part }
  58. END;     { QSort }
  59. !BEGIN    { Main = QuickSortDemo }
  60.   FOR K := 1 TO Size DO
  61.      L[K] := TRUNC( RANDOM*900 );
  62.   QSort( 1, Size );
  63. END.     { QuickSortDemo }
  64. Bad variable number.
  65.