is-Logo Suchen und Sortieren
- Suchalgorithmen -

S. Spolwig

[Home | Algorithmen]

Die Suchalgorithmen sind als Methoden einer statischen Liste (Feld) ausgeführt:

 

UNIT uWortListe;
(* ******************************************************************** *)
(*                                                                      *)
(* K L A S S E   : TWortListe                                           *)
(* -------------------------------------------------------------------- *)
(* Version       : 1.3                                                  *)
(* Autor         : S. Spolwig, OSZ-Handel I, 10997 Berlin               *)
(*                                                                      *)
(* Aufgabe       : Statische Liste zur Verwaltung beliebiger Strings    *)
(* ******************************************************************** *)
INTERFACE
const
   MAXLAENGE = 10000;
type
  TElement = string;
  
  TWortListe  = class (TStrListe)
   {
   private
    Kollektion  : array [0..MAXLAENGE + 1] of TElement;
    ListenLaenge,     // Anzahl der belegten Elemente
    AktuellePos : Word;
    ...
    }
  end;

(*  ----------------- B e s c h r e i b u n g -------------------------

Oberklasse     : TStrListe
Bezugsklassen  : -

Methoden
--------

SearchPos (key: string) : integer
  Anfrage: ob key in der Liste enthalten ist
  vorher : -
  nachher: liefert die Position in der Liste; wenn nicht vorhanden, 0


SearchPosBin (key: string) : integer
  Anfrage: ob key in der Liste enthalten ist
  vorher : -
  nachher: liefert die Position in der Liste; wenn nicht vorhanden, 0


RekursivDurchsuchen (key : string; unten,oben : integer; var Pos: integer )
----------------------------------------------------------------------- *)


IMPLEMENTATION
(* ==================================================================== *)

function  TWortListe.SearchPos (key : string) : integer;
(* -------------------------------------------------------------------- *)
begin
  Result := 0;   // nicht gefunden!
  First;
  while (Result = 0) AND (NOT EoList) do
  begin
     if Kollektion[AktuellePos] = key
     then Result := AktuellePos
     else inc(AktuellePos);   //Next;
  end;
end;


function  TWortListe.SearchPos (key : string) : integer;
(* -------------------------------------------------------------------- *)
(* Auftrag: lineares Suchen nach Wirth                                  *)
(* -------------------------------------------------------------------- *)
begin
  Result := 0;  // nicht drin
  AktuellePos := Listenlaenge + 1;
  SetElement(key);

  First;
  while Kollektion[AktuellePos] <> key do
  begin
    inc(AktuellePos); // next;
  end;

  if AktuellePos <= ListenLaenge
  then Result := AktuellePos;
end;


function  TWortListe.SearchPosBin (key : string) : integer;
(* -------------------------------------------------------------------- *)
var
  unten,
  oben,
  mitte   : integer;

begin
  Result := 0;   // nicht gefunden
  unten  := 1;
  oben   := ListenLaenge;

  while (oben >= unten) and (Result = 0) do
  begin
     mitte := (unten + oben) div 2;
     if (Kollektion[mitte] = key)      (* Treffer *)
     then Result := mitte
     else
       begin
         if (key < Kollektion[mitte])
         then oben  := mitte - 1
         else unten := mitte + 1;
       end;
  end; (* while *)
end;


procedure TWortListe.RekursivDurchsuchen (key : string; unten,oben : integer;
                                      var Pos: integer );
(* -------------------------------------------------------------------- *)
var mitte : integer;

begin
   if unten > oben
   then Pos := 0    (* abbruch - nicht gefunden *)
   else
     begin
       mitte := (unten + oben) div 2;

       if Kollektion[mitte] = key
       then Pos := mitte  (* Treffer ! *)
       else
         if (key < Kollektion[mitte])
         then RekursivDurchsuchen(key, unten, mitte -1, Pos)
         else RekursivDurchsuchen(key, mitte + 1, oben, Pos)
     end;  (* else AktuellePos *)
end;

END.

©    05. Oktober 2008   Siegfried Spolwig

page_top