Il vettore V contiene due sequenze adiacenti ordinate (V' da Inf a Medio e V'' da Medio+1 a Sup). Si puņ adattare l'algoritmo di fusione su tre vettori in modo che i dati siano copiati, in ordine, su un vettore temporaneo e poi ricopiati su V, da Inf a Sup
procedure MERGE(Var V: Vettore; Inf, Medio, Sup: Integer);
Var
I, J, K: Integer;
VTemp: Vettore;
begin
I:=Inf;
J:=Medio+1;
K:=Inf;
while(I <= Medio) And (J <= Sup) do
begin
if(V[I] < V[J]) then
begin
VTemp[K]:=V[I];
Inc(I);
end
else
begin
VTemp[K]:=V[J];
Inc(J);
end;
Inc(K);
end;
while(I <= Medio) do
begin
VTemp[K]:=V[I];
Inc(I);
Inc(K);
end;
while(J <= Sup) do
begin
VTemp[K]:=V[J];
Inc(J);
Inc(K);
end;
for I:=Inf to Sup do
V[I]:=VTemp[I];
end;
Esempi
V={1, 2, 4, 5, 7, 10, 2, 3, 4, 6}, inf=1, medio=6, sup=10 --> V={1, 2, 2, 3, 4, 4, 5, 6, 7, 10}
V={1, 2, 4, 5, 7, 10, 2, 3, 4, 6}, inf=5, medio=6, sup=8 --> V={1, 2, 4, 5, 2, 3, 7, 10, 4, 6}
|