home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 12 / algorith / bubble.inc < prev    next >
Encoding:
Text File  |  1989-08-27  |  2.3 KB  |  55 lines

  1. procedure bubble_sort;
  2.  var bb:boolean;
  3. (* sortiert alle karteikarten alphabetisch nach einem angegebenen feld *)
  4.  begin
  5.   if kartanz>1 then
  6.    begin
  7.     if (erster_begriff[feld]<>nil) and (sortierer='') then
  8.       sortierer:=erster_begriff[feld]^.begriff;
  9.     kt:=nix; bb:=false;
  10. (* bestimme die feldnummer des sortierers *)
  11.     repeat
  12.      kt:=succ(kt);
  13.      fnr:=0;
  14.      repeat
  15.       fnr:=fnr+1;
  16.       hilfstr:=feldnamen[kt,fnr];
  17.       bb:=enthalten_in(sortierer,hilfstr)
  18.      until bb or (fnr>4);
  19.     until bb or (kt=letzter_typ);
  20.     if bb then begin z:=0; repeat
  21.                              z:=z+1; karte:=erste_karte;
  22.                              y:=0; no_change:=true;
  23.                              repeat
  24.                               y:=y+1;
  25.                               sorthilf:=karte^.naechste;
  26. (* haben zwei aufeinanderfolgende karten falsche alphabetische reihenfolge, *)
  27. (* dann vertausche sie *)
  28.                               if (sorthilf<>nil) and
  29.                                (karte^.inhalt[fnr]>sorthilf^.inhalt[fnr]) then
  30.                                begin
  31.                                 if karte=erste_karte then
  32.                                  begin
  33.                                   erste_karte:=sorthilf;
  34.                                   zwischen:=sorthilf^.naechste;
  35.                                   sorthilf^.naechste:=karte;
  36.                                   karte^.naechste:=zwischen;
  37.                                   no_change:=false;
  38.                                  end
  39.                                 else
  40.                                  begin
  41.                                   vorgaenger^.naechste:=sorthilf;
  42.                                   zwischen:=sorthilf^.naechste;
  43.                                   sorthilf^.naechste:=karte;
  44.                                   karte^.naechste:=zwischen;
  45.                                   no_change:=false;
  46.                                  end;
  47.                                 end;
  48.                                vorgaenger:=karte; karte:=karte^.naechste;
  49.                               until y=kartanz-1;
  50. (* wenn kein tausch mehr erfolgte, ist das sortieren abgeschlossen *)
  51.                              until no_change;
  52.                        end;
  53.    end;
  54.   end;
  55.