|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die folgenden Beispiele zeigen das Suchen in einem sortierten Feldern mittels Intervallhalbierung.
| Sprache | C | Pascal | Modula |
|---|---|---|---|
| Beispiel | feldsuch.c | feldsuch.pas | feldsuch.mod |
/* Suchen in einem sortierne Feld mit Intervallhalbierung ohne */
/* Test auf Exitenz. Da der Datentyp erst bei einer konkreten */
/* Anwendung feststeht, ist der Sortieralgorithmus nur als */
/* Beispiel und nicht als Modul programmiert. */
#define MAX_SORT_ELT 8000
typedef long SortKeyType;
typedef SortKeyType SortKeyArray[MAX_SORT_ELT];
int Such(SortKeyArray Feld, int Anz, SortKeyType Value)
{ int Min, Max, Mitte;
Min = 0;
Max = Anz-1;
do {
Mitte = Min + (Max - Min + 1) / 2;
if (Value > Feld[Mitte])
{
Min = Mitte + 1;
}
else if (Value < Feld[Mitte])
{
Max = Mitte - 1;
}
} while (Feld[Mitte] != Value);
return Mitte;
}
(* Suchen in einem sortierne Feld mit Intervallhalbierung ohne *)
(* Test auf Exitenz. Da der Datentyp erst bei einer konkreten *)
(* Anwendung feststeht, ist der Sortieralgorithmus nur als *)
(* Beispiel und nicht als Modul programmiert. *)
const
MaxSortElt = 8000;
type
SortKeyType = long_integer;
SortKeyArray = array[1..MaxSortElt] of SortKeyType;
function Such(var Feld:SortKeyArray; Anz:integer; Value:SortKeyType):integer;
var
Min, Max, Mitte : integer;
begin
Min := 1;
Max := Anz;
repeat
Mitte := Min + (Max - Min) div 2;
if (Value > Feld[Mitte]) then
begin
Min := Mitte + 1;
end
else if (Value < Feld[Mitte]) then
begin
Max := Mitte - 1;
end;
until (Feld[Mitte] = Value);
Such := Mitte;
end;
(* Suchen in einem sortierne Feld mit Intervallhalbierung ohne *)
(* Test auf Exitenz. Da der Datentyp erst bei einer konkreten *)
(* Anwendung feststeht, ist der Sortieralgorithmus nur als *)
(* Beispiel und nicht als Modul programmiert. *)
CONST
MaxSortElt = 8000;
TYPE
SortKeyType = LONGINT;
SortKeyArray = ARRAY[1..MaxSortElt] OF SortKeyType;
PROCEDURE Such(VAR Feld:SortKeyArray; Anz:CARDINAL; Value:SortKeyType):CARDINAL;
VAR
Min, Max, Mitte : CARDINAL;
BEGIN
Min := 1;
Max := Anz;
REPEAT
Mitte := Min + (Max - Min) DIV 2;
IF (Value > Feld[Mitte]) THEN
Min := Mitte + 1;
ELSIF (Value < Feld[Mitte]) THEN
Max := Mitte - 1;
END;
UNTIL (Feld[Mitte] = Value);
RETURN Mitte;
END Such;
|
English version not yet available. |