home *** CD-ROM | disk | FTP | other *** search
/ Big Blue Disk 17 / bbd17.zip / SHELL.PAS < prev    next >
Pascal/Delphi Source File  |  1987-10-22  |  1KB  |  55 lines

  1. PROGRAM Sort;
  2. CONST
  3.   LSize = 40;
  4. TYPE
  5.   List = ARRAY[1..LSize] of INTEGER;
  6. VAR
  7.   AList: List;
  8.   Count: INTEGER;
  9.  
  10. PROCEDURE ShellSort(
  11.   VAR L  { List to be sorted }
  12.     :List;
  13.   N      { No. of items to be sorted }
  14.     :INTEGER
  15.    );
  16.  
  17. VAR
  18.   Distance, StageNo, Loc : INTEGER;
  19.   StageOver: BOOLEAN;
  20.  
  21. PROCEDURE Swap( VAR X, Y : INTEGER );
  22. VAR Temp:INTEGER;
  23. BEGIN
  24.   Temp := X;
  25.   X := Y;
  26.   Y := Temp
  27. END;
  28.  
  29. BEGIN              { ShellSort }
  30.   Distance := N DIV 2;
  31.   WHILE Distance > 0  DO
  32.     BEGIN
  33.       FOR StageNo := Distance TO N-1  DO
  34.         BEGIN
  35.           StageOver := False;
  36.           Loc := StageNo+1;
  37.           WHILE (Loc-Distance>0) AND NOT StageOver DO
  38.             BEGIN
  39.               IF L[Loc] < L[Loc-Distance]
  40.                  THEN Swap( L[Loc],L[Loc-Distance] )
  41.                  ELSE StageOver := True;
  42.               Loc := Loc - Distance
  43.             END
  44.         END;
  45.       Distance := Distance DIV 2
  46.     END
  47. END;              { ShellSort }
  48.  
  49. BEGIN              { Try }
  50.   FOR Count := 1 TO LSize DO
  51.     AList[Count] := TRUNC(RANDOM*900);
  52.   ShellSort( AList, LSize );
  53.   FOR Count := 1 TO LSize DO
  54.     Write( AList[Count]:4 )
  55. END.