Pascal/Turbo Pascal - Metodo de la burbuja - Ordenacion alfabeticamente

 
Vista:

Metodo de la burbuja - Ordenacion alfabeticamente

Publicado por sharkxp2003 (1 intervención) el 11/03/2012 14:26:55
He visto por los temas que se cita un monton el Metodo de la burbuja para ordenar alfabeticamente, yo en particular lo tuve que emplear para una unit hace poco y quise buscarlo por aqui pero no lo encontre... Asi que cree un algoritmo yo para ordenar y resulto ser el metodo de la burbuja hehe, os lo dejo para futuras busquedas.
Lo compilo en freepascal.

Voy a hacerlo de dos formas, la primera es si tenemos un array con datos y queremos ordenarlo, y la segunda forma sera introduciendo y ordenando a la vez.

FORMA 1:

PROGRAM OrdenarDespues;
CONST
N = 7;
TYPE
arr = array [1..N] of string;
VAR
lista : arr;
i,j:= integer;
aux1,aux2:string; {Usamos dos variables auxiliares para "copiar y pegar" los datos del array}
BEGIN
For i:=1 to N DO
begin
write ('Introduzca el dato ',i,' de ',N,':');
readln (lista[i]);
end;
{Una vez tenemos nuestro array lleno de datos, ordenamos}

For i:=1 to N DO {Repetimos el procedimiento tantas veces como elementos haya en el array}
For j:=1 to N DO
begin
If (lista[j] > lista[j+1]) then
begin
aux1:=lista[j];
aux2:=lista[j+1];
lista[j]:=aux2;
lista[j+1]:=aux1;
end;
end;

For i:=1 to N DO
writeln (lista[i]); {Mostramos el array ordenado}


FORMA 2:

No me voy a matar a escribir todo el codigo de esta forma, lo que yo hice fue simplemente implementar
el codigo de arriba a una funcion que introduce datos teniendo en cuenta otras funciones previas que me
muestran las posiciones del primer y ultimo elemento de una lista. Es util para programas de implementacion y TAD listaestatica. De hecho, esta forma ordena una lista de datos segun el nick de usuario que se introduzca.
{Os pongo esto para que os deis una idea del tdato:
type
tnickusuario = string;
ttipousuario = (normal,premium);
tnumreproducciones = integer;
tdato = record
nickusuario : tnickusuario;
numreproducciones : tnumreproducciones;
tipodato : ttipousuario;
end;}


FUNCTION InsertarDato (d :tdato; var Lista :tLista):boolean;
{Objetivo: Inserta un tipo dato, con valor a aniadir por el usuario de forma ordenada.
* Entrada: Un dato del tipo tdato, y una lista valida
* Salida: Devuelve TRUE si el dato fue insertado, ordenandolo alfabeticamente y FALSE en caso contrario.
* Precondicion: Un dato del tipo tdato y una lista valida.}
VAR
i : integer;
x,y : tdato;
p : tPosL;
BEGIN
if (Lista.fin = MAX) then
InsertarDato:= false
else
begin
p:=ultima(lista)+1;
lista.listaOrdenada[p] := d;


For i:=ultima(lista) downto Primera(Lista) do
begin
If (lista.listaOrdenada[i].nickusuario) > (lista.listaOrdenada[i+1].nickusuario) then
begin
x:=lista.listaOrdenada[i];
y:=lista.listaOrdenada[i+1];
lista.listaOrdenada[i]:=y;
lista.listaOrdenada[i+1]:=x;
end;

end;

If lista.fin < p then lista.fin := p;
InsertarDato := TRUE;
end;

end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder