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;