home *** CD-ROM | disk | FTP | other *** search
- (*--------------------------------------------------*)
- (* SORT.PAS *)
- (* Einige Sortierroutinen in Pascal formuliert. *)
- (* (C) 1988 H.Zölzer & PASCAL Int. *)
-
- PROCEDURE Bubblesort;
-
- VAR i,j :integer;
- hilf :elemtyp;
-
- BEGIN
- FOR i:=anzelem DOWNTO 2 DO
- FOR j:=2 TO i DO
- IF elem[j-1] > elem[j]
- THEN
- BEGIN
- hilf:=elem[j-1];
- elem[j-1]:=elem[j];
- elem[j]:=hilf;
- END;
- END;
-
-
- PROCEDURE Maxsort;
-
- VAR i,j :integer;
- hilf :elemtyp;
-
- BEGIN
- FOR i:=anzelem DOWNTO 2 DO
- FOR j:=1 TO i DO
- IF elem[i] < elem[j]
- THEN
- BEGIN
- hilf:=elem[i];
- elem[i]:=elem[j];
- elem[j]:=hilf;
- END;
- END;
-
-
- PROCEDURE Straightsort;
-
- VAR i,j,k :integer;
- hilf,max :elemtyp;
-
- BEGIN
- FOR i:=anzelem DOWNTO 2 DO
- BEGIN
- max:=0;
- FOR j:=1 TO i DO
- IF elem[j] > max
- THEN
- BEGIN
- max:=elem[j];
- k:=j;
- END;
- hilf:=elem[i];
- elem[i]:=elem[k];
- elem[k]:=hilf;
- END;
- END;
-
-
- PROCEDURE Quicksort;
-
- VAR links :array[1..50] of integer;
- rechts :array[1..50] of integer;
- i,j,li,re,spzeig :integer;
- mitte,hilf :elemtyp;
-
- BEGIN
- spzeig:=1;
- links[spzeig]:=1;
- rechts[spzeig]:=anzelem;
- REPEAT
- li:=links[spzeig];
- re:=rechts[spzeig];
- spzeig:=spzeig-1;
- REPEAT
- i:=li;
- j:=re;
- mitte:=elem[(li+re) div 2];
- REPEAT
- WHILE elem[i]<mitte DO
- i:=i+1;
- WHILE elem[j]>mitte DO
- j:=j-1;
- IF i<=j
- THEN
- BEGIN
- hilf:=elem[i];
- elem[i]:=elem[j];
- elem[j]:=hilf;
- i:=i+1;
- j:=j-1;
- END;
- UNTIL i>j;
- IF i<re
- THEN
- BEGIN
- spzeig:=spzeig+1;
- links[spzeig]:=i;
- rechts[spzeig]:=re;
- END;
- re:=j;
- UNTIL li>=re;
- UNTIL spzeig<1;
- END;
-
-
- PROCEDURE Fastsort;
-
- VAR links :array[1..50] of integer;
- rechts :array[1..50] of integer;
- i,j,li,re,spzeig :integer;
- mitte,hilf :elemtyp;
-
-
- PROCEDURE Straightsort;
-
- VAR i,j,k :integer;
- max :elemtyp;
-
- BEGIN
- FOR i:=re DOWNTO li+1 DO
- BEGIN
- max:=0;
- FOR j:=li TO i DO
- IF elem[j] > max
- THEN
- BEGIN
- max:=elem[j];
- k:=j;
- END;
- hilf:=elem[i];
- elem[i]:=elem[k];
- elem[k]:=hilf;
- END;
- END;
-
-
- BEGIN
- spzeig:=1;
- links[spzeig]:=1;
- rechts[spzeig]:=anzelem;
- REPEAT
- li:=links[spzeig];
- re:=rechts[spzeig];
- spzeig:=spzeig-1;
- IF re-li<13
- THEN Straightsort
- ELSE
- BEGIN
- REPEAT
- i:=li;
- j:=re;
- mitte:=elem[(li+re) div 2];
- REPEAT
- WHILE elem[i]<mitte DO
- i:=i+1;
- WHILE elem[j]>mitte DO
- j:=j-1;
- IF i<=j
- THEN
- BEGIN
- hilf:=elem[i];
- elem[i]:=elem[j];
- elem[j]:=hilf;
- i:=i+1;
- j:=j-1;
- END;
- UNTIL i>j;
- IF i<re
- THEN
- BEGIN
- spzeig:=spzeig+1;
- links[spzeig]:=i;
- rechts[spzeig]:=re;
- END;
- re:=j;
- UNTIL li>=re;
- END;
- UNTIL spzeig<1;
- END;
-