Utilizza l'algoritmo di fusione su un vettore.
Procedure MERGESORT(Var V: Vettore; Inf, Sup: Integer);
Var
Medio: Integer;
begin
if(Inf < Sup) then
begin
Medio:=(Inf+Sup) Div 2;
MERGESORT(V, Inf , Medio);
MERGESORT(V, Medio+1, Sup );
Merge(V, Inf, Medio, Sup);
end;
end;
Esempio 1
V={1, 3, 7, 4, 15, 0, 9, 10}
Gli indici Inf e Sup assumono i valori
1...8 |
1..4 |
5...8 |
1...2 |
3...4 |
5...6 |
7...8 |
1...1 |
2...2 |
3...3 |
4...4 |
5...5 |
6...6 |
7...7 |
8...8 |
e il vettore diventa
{1, 3, 7, 4, 15, 0, 9, 10} |
{1, 3, 7, 4} |
{15, 0, 9, 10} |
{1, 3} |
{7, 4} |
{15, 0} |
{9, 10} |
{1} |
{3} |
{7} |
{4} |
{15} |
{0} |
{9} |
{10} |
{1, 3} |
{4, 7} |
{0, 15} |
{9, 10} |
{1, 3, 4, 7} |
{0, 9, 10, 15} |
{0, 1, 3, 4, 7, 9, 10, 15} |
V={0, 1, 3, 4, 7, 9, 10, 15}
Esempio 2
V={1, 3, 7, 4, 15, 0, 9, 10, 8, 2}
Gli indici Inf e Sup assumono i valori
1...10 |
1..5 |
6...10 |
1...3 |
4...5 |
6...8 |
9...10 |
1...2 |
3...3 |
4...4 |
5...5 |
6...7 |
8...8 |
9...9 |
10...10 |
1...1 |
2...2 |
6...6 |
7...7 |
e il vettore diventa
{1, 3, 7, 4, 15, 0, 9, 10, 8, 2} |
{1, 3, 7, 4, 15} |
{0, 9, 10, 8, 2} |
{1, 3, 7} |
{4, 15} |
{0, 9, 10} |
{8, 2} |
{1, 3} |
{7} |
{4} |
{15} |
{0, 9} |
{10} |
{8} |
{2} |
{1} |
{3} |
{0} |
{9} |
{1, 3} |
{0, 9} |
{1, 3} |
{4, 7} |
{0, 15} |
{9, 10} |
{1, 3, 4, 7} |
{0, 9, 10, 15} |
{0, 1, 2, 3, 4, 7, 8, 9, 10, 15} |
V={0, 1, 2, 3, 4, 7, 8, 9, 10, 15} |