home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 08_09 / sort.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-05-18  |  3.7 KB  |  186 lines

  1. (*--------------------------------------------------*)
  2. (*                   SORT.PAS                       *)
  3. (*   Einige Sortierroutinen in Pascal formuliert.   *)
  4. (*          (C) 1988 H.Zölzer & PASCAL Int.         *)
  5.  
  6. PROCEDURE Bubblesort;
  7.  
  8. VAR i,j :integer;
  9.     hilf :elemtyp;
  10.  
  11. BEGIN
  12.   FOR i:=anzelem DOWNTO 2 DO
  13.     FOR j:=2 TO i DO
  14.       IF elem[j-1] > elem[j]
  15.         THEN
  16.           BEGIN
  17.             hilf:=elem[j-1];
  18.             elem[j-1]:=elem[j];
  19.             elem[j]:=hilf;
  20.           END;
  21. END;
  22.  
  23.  
  24. PROCEDURE Maxsort;
  25.  
  26. VAR i,j :integer;
  27.     hilf :elemtyp;
  28.  
  29. BEGIN
  30.   FOR i:=anzelem DOWNTO 2 DO
  31.     FOR j:=1 TO i DO
  32.       IF elem[i] < elem[j]
  33.         THEN
  34.           BEGIN
  35.             hilf:=elem[i];
  36.             elem[i]:=elem[j];
  37.             elem[j]:=hilf;
  38.           END;
  39. END;
  40.  
  41.  
  42. PROCEDURE Straightsort;
  43.  
  44. VAR i,j,k :integer;
  45.     hilf,max :elemtyp;
  46.  
  47. BEGIN
  48.   FOR i:=anzelem DOWNTO 2 DO
  49.     BEGIN
  50.       max:=0;
  51.       FOR j:=1 TO i DO
  52.         IF elem[j] > max
  53.           THEN
  54.             BEGIN
  55.               max:=elem[j];
  56.               k:=j;
  57.             END;
  58.       hilf:=elem[i];
  59.       elem[i]:=elem[k];
  60.       elem[k]:=hilf;
  61.     END;
  62. END;
  63.  
  64.  
  65. PROCEDURE Quicksort;
  66.  
  67. VAR links :array[1..50] of integer;
  68.     rechts :array[1..50] of integer;
  69.     i,j,li,re,spzeig :integer;
  70.     mitte,hilf :elemtyp;
  71.  
  72. BEGIN
  73.   spzeig:=1;
  74.   links[spzeig]:=1;
  75.   rechts[spzeig]:=anzelem;
  76.   REPEAT
  77.     li:=links[spzeig];
  78.     re:=rechts[spzeig];
  79.     spzeig:=spzeig-1;
  80.     REPEAT
  81.       i:=li;
  82.       j:=re;
  83.       mitte:=elem[(li+re) div 2];
  84.       REPEAT
  85.         WHILE elem[i]<mitte DO
  86.           i:=i+1;
  87.         WHILE elem[j]>mitte DO
  88.           j:=j-1;
  89.         IF i<=j
  90.           THEN
  91.             BEGIN
  92.               hilf:=elem[i];
  93.               elem[i]:=elem[j];
  94.               elem[j]:=hilf;
  95.               i:=i+1;
  96.               j:=j-1;
  97.             END;
  98.       UNTIL i>j;
  99.       IF i<re
  100.         THEN
  101.           BEGIN
  102.             spzeig:=spzeig+1;
  103.             links[spzeig]:=i;
  104.             rechts[spzeig]:=re;
  105.           END;
  106.       re:=j;
  107.     UNTIL li>=re;
  108.   UNTIL spzeig<1;
  109. END;
  110.  
  111.  
  112. PROCEDURE Fastsort;
  113.  
  114. VAR links :array[1..50] of integer;
  115.     rechts :array[1..50] of integer;
  116.     i,j,li,re,spzeig :integer;
  117.     mitte,hilf :elemtyp;
  118.  
  119.  
  120.   PROCEDURE Straightsort;
  121.  
  122.   VAR i,j,k :integer;
  123.       max :elemtyp;
  124.  
  125.   BEGIN
  126.     FOR i:=re DOWNTO li+1 DO
  127.       BEGIN
  128.         max:=0;
  129.         FOR j:=li TO i DO
  130.           IF elem[j] > max
  131.             THEN
  132.               BEGIN
  133.                 max:=elem[j];
  134.                 k:=j;
  135.               END;
  136.         hilf:=elem[i];
  137.         elem[i]:=elem[k];
  138.         elem[k]:=hilf;
  139.       END;
  140.   END;
  141.  
  142.  
  143. BEGIN
  144.   spzeig:=1;
  145.   links[spzeig]:=1;
  146.   rechts[spzeig]:=anzelem;
  147.   REPEAT
  148.     li:=links[spzeig];
  149.     re:=rechts[spzeig];
  150.     spzeig:=spzeig-1;
  151.     IF re-li<13
  152.       THEN Straightsort
  153.       ELSE
  154.         BEGIN
  155.           REPEAT
  156.             i:=li;
  157.             j:=re;
  158.             mitte:=elem[(li+re) div 2];
  159.             REPEAT
  160.               WHILE elem[i]<mitte DO
  161.                 i:=i+1;
  162.               WHILE elem[j]>mitte DO
  163.                 j:=j-1;
  164.               IF i<=j
  165.                 THEN
  166.                   BEGIN
  167.                     hilf:=elem[i];
  168.                     elem[i]:=elem[j];
  169.                     elem[j]:=hilf;
  170.                     i:=i+1;
  171.                     j:=j-1;
  172.                   END;
  173.             UNTIL i>j;
  174.             IF i<re
  175.               THEN
  176.                 BEGIN
  177.                   spzeig:=spzeig+1;
  178.                   links[spzeig]:=i;
  179.                   rechts[spzeig]:=re;
  180.                 END;
  181.             re:=j;
  182.           UNTIL li>=re;
  183.         END;
  184.   UNTIL spzeig<1;
  185. END;
  186.