Ordenación ShellSort, ¿visualizarlo paso a paso?
Publicado por Pascalito (12 intervenciones) el 04/04/2007 19:03:33
Hola chicos, estoy aprendiendo a "ordenar" con diferentes métodos. Por ejemplo, ahora estoy viendo el método [b]ShellSort[/b], el cual, divide la lista (en la que tengo los valores a ordenar) en grupos de dos....
El caso es que he encontrado un ejemplo de este método por la red y lo que me gustaría saber es: ¿cómo puedo hacer, que tengo que añadir en el código para poder ir viendo paso a paso los cambios que va realizando en la lista?
Por ejemplo, tengo la lista: 1 8 4 3 7. Me gustaría ver paso a paso como va ordenandose. Me ayudáis????? es que no me sale correctamente.
Gracias a todos!!!!
Os paso el código que funciona correctamente:
__________________
program ShellSort;
{modelo de odenacion de "x" enteros aleatorios}
uses
crt;
const
numumElem = 5;
type
rango = 1..numumElem;
Tlista = array [rango] of integer;
var
lista : Tlista;
(*_________________________________*)
procedure lista_aleatoria(var list : Tlista; elementos : integer);
var
i : integer;
begin
randomize;
for i := 1 to elementos do
list[i] := Random(1000);
end;
(*_________________________________*)
procedure visualizar_lista(var list : Tlista; elementos : integer);
var
i : integer;
begin
for i := 1 to elementos do
write(list[i]:6, ' ');
writeln();
end;
(*_________________________________*)
procedure intercambiar(var x, y : integer);
var
aux : integer;
begin
aux := x;
x := y;
y := aux;
end;
(*_________________________________*)
procedure ShellSort(var list : Tlista; num : integer);
var
lista_dividida, i, j, k : integer;
begin
lista_dividida := num div 2;
while (lista_dividida > 0) do
begin
for i := (lista_dividida + 1) to num do
begin
j := i - lista_dividida;
while (j > 0) do
begin
k := j + lista_dividida;
if (list[j] <= list[k]) then
j := 0
else
intercambiar(list[j], list[k]);
j := j - lista_dividida;
end; {while j > 0}
end; {for}
lista_dividida := lista_dividida div 2;
end; {while (lista_dividida > 0)}
end;
(*_________________________________*)
begin
{programa principal}
clrscr;
writeln();
write(' Generar numeros aleatorios: ');
lista_aleatoria(lista, numumElem);
visualizar_lista(lista, numumElem);
writeln();
write(' Ordenacion por ShellSort: ');
ShellSort(lista, numumElem);
visualizar_lista(lista, numumElem);
writeln();
writeln();
end.
El caso es que he encontrado un ejemplo de este método por la red y lo que me gustaría saber es: ¿cómo puedo hacer, que tengo que añadir en el código para poder ir viendo paso a paso los cambios que va realizando en la lista?
Por ejemplo, tengo la lista: 1 8 4 3 7. Me gustaría ver paso a paso como va ordenandose. Me ayudáis????? es que no me sale correctamente.
Gracias a todos!!!!
Os paso el código que funciona correctamente:
__________________
program ShellSort;
{modelo de odenacion de "x" enteros aleatorios}
uses
crt;
const
numumElem = 5;
type
rango = 1..numumElem;
Tlista = array [rango] of integer;
var
lista : Tlista;
(*_________________________________*)
procedure lista_aleatoria(var list : Tlista; elementos : integer);
var
i : integer;
begin
randomize;
for i := 1 to elementos do
list[i] := Random(1000);
end;
(*_________________________________*)
procedure visualizar_lista(var list : Tlista; elementos : integer);
var
i : integer;
begin
for i := 1 to elementos do
write(list[i]:6, ' ');
writeln();
end;
(*_________________________________*)
procedure intercambiar(var x, y : integer);
var
aux : integer;
begin
aux := x;
x := y;
y := aux;
end;
(*_________________________________*)
procedure ShellSort(var list : Tlista; num : integer);
var
lista_dividida, i, j, k : integer;
begin
lista_dividida := num div 2;
while (lista_dividida > 0) do
begin
for i := (lista_dividida + 1) to num do
begin
j := i - lista_dividida;
while (j > 0) do
begin
k := j + lista_dividida;
if (list[j] <= list[k]) then
j := 0
else
intercambiar(list[j], list[k]);
j := j - lista_dividida;
end; {while j > 0}
end; {for}
lista_dividida := lista_dividida div 2;
end; {while (lista_dividida > 0)}
end;
(*_________________________________*)
begin
{programa principal}
clrscr;
writeln();
write(' Generar numeros aleatorios: ');
lista_aleatoria(lista, numumElem);
visualizar_lista(lista, numumElem);
writeln();
write(' Ordenacion por ShellSort: ');
ShellSort(lista, numumElem);
visualizar_lista(lista, numumElem);
writeln();
writeln();
end.
Valora esta pregunta


0