Buenas!
Básicamente la pregunta de un examen es:
- Pseudocódigo de la ordenación mezcla por ambos lados del array alternativamente (Mergesort).
Y mi duda es...y como hago eso? jajaj
Un MergeSort que tuve que hacer en una práctica era el siguiente:
spoiler procedure fusionar (inicio, centro, fin: integer; var datos : TipSec);
var
i, j, k: integer;
aux: TipSec;
begin
i := inicio;
j := centro + 1;
k := inicio;
while (i <= centro) and (j <= fin) do
begin
if (datos[i].cla < datos[j].cla) then
begin
aux[k] := datos[i];
inc(i);
end
else
begin
aux[k] := datos[j];
inc(j);
end;
inc(k);
end;
while i <= centro do
begin
aux[k] := datos[i];
inc(k);
inc(i);
end;
while (j <= fin) do
begin
aux[k] := datos[j];
inc(k);
inc(j);
end;
for k := inicio to fin do
datos[k] := aux[k];
end;
procedure mergesort (inicio,fin : integer; var datos : TipSec; r : integer);
var
centro: integer;
begin
if (inicio < fin) then
begin
centro := (inicio + fin) div 2;
mergesort (inicio, centro, datos, r + 1);
mergesort (centro + 1, fin, datos, r + 1);
fusionar (inicio, centro, fin, datos);
end;
end;
Tiene que ser una mezcla entre el método de la sacudida y el mergesort, pero no se como hacerlo.