Ergebnis 1 bis 4 von 4

Thema: [Delphi] Sortieren durch binäres Einfügen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Danke für die Hilfe.
    Das ist zwar nicht das Verfahren, dass ich gesucht habe, aber sicher auch eine gute Möglichkeit. Ich wußte gar nicht, dass man die concat-Funktion auch auf Arrays anwenden kann.

    Wie auch immer, ich habe es jetzt doch geschafft, das Sortierverfahren sozusagen auf Papier zu bringen. Getestet habe ich es zwar noch nicht, weil ich keinen Compiler habe, aber es sollte theoretisch funktionieren. Für diejenigen, die es interessiert, hier der Quellcode:
    Code:
    // nliste (Liste nachher) und vliste (Liste vorher) sind global
    var i, sortierte_werte, marke, intervallbreite, zwischenspeicher_1, zwischenspeicher_2: integer;
    	begin
    	for i := 1 to anzahl do // nliste auf Null setzen
    		begin
    		nliste[i] := 0;
    		end;
    	nliste[1] := vliste[1];	// Die ersten zwei Werte verteilen.
    	if (vliste[2] >= vliste[1]) then nliste[2] := vliste[2];
    	else
    		begin
    		nliste[2] := vliste[1];
    		nliste[1] := vliste[2];
    		end;
    	sortierte_werte := 0;
    	while (nliste[sortierte_werte + 1] <> 0) do // Sortierte Werte zählen
    		begin
    		inc(sortierte_werte);
    		end;
    	for i := 1 to anzahl do
    		begin
    		marke := Round(sortierte_werte / 2)
    		intervallbreite :=  Round(sortierte_werte / 2);
    		repeat
    			if (vliste[i] < nliste[marke]) then
    				begin
    				intervallbreite := Round(intervallbreite / 2);
    				marke := marke - intervallbreite;
    				end;
    			else
    				begin
    				intervallbreite := Round(intervallbreite / 2);
    				marke := marke + intervallbreite;
    				end;
    		until ((nliste[marke] <= vliste[i]) and (nliste[marke + 1] >= vliste[i])) or (marke = 0) or (marke = 10001);
    		zwischenspeicher_1 := nliste[marke]	// alten Wert zwischenspeichern
    		nliste[marke] := vliste[i];	// neuen Wert einfügen
    		while (nliste[zwischenspeicher_1] <> 0) do	// Werte verschieben
    			begin
    			zwischenspeicher_2 := nliste[marke + 1]
    			nliste[marke + 1] := zwischenspeicher_1;
    			zwischenspeicher_1 := zwischenspeicher_2;
    			inc(marke);
    			end;
    		end;

  2. #2
    Zitat Zitat von elite_benny
    Danke für die Hilfe.
    Das ist zwar nicht das Verfahren, dass ich gesucht habe, aber sicher auch eine gute Möglichkeit. Ich wußte gar nicht, dass man die concat-Funktion auch auf Arrays anwenden kann.
    Ich wußte gar nicht, daß sie überhaupt existiert. Ich spreche kein Delphi und habe an der Stelle nur zeigen wollen, daß zwei Arrays konkateniert werden - wie genau das geht habe ich nicht gesagt. Der Metacode hat mit Pascal nichts zu tun.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •