Dudas sobre el ordenamiento burbuja en listas simples

Iniciado por Beginner Web, 12 Diciembre 2018, 04:56 AM

0 Miembros y 1 Visitante están viendo este tema.

Beginner Web

Código (cpp) [Seleccionar]
//Porque el codigo funciona asi en listas vacias o no?
void ordenar(tlista &lista)
{
puntero i, j;
estructura cambio;
bool ordenado=true;
if(lista.inicio!=NULL){
while(ordenado){
ordenado=false;
for(i=lista.inicio;i->sig!=NULL;i=i->sig){
j=i->sig;
if(i->dato>j->dato){
cambio=i->dato;
i->dato=j->dato;
j->dato=cambio;
ordenado=true;
}
}
}
}
}
//y este codigo solo funciona en listas no vacias, me perdí
void ordenar(tlista &lista)
{
puntero i, j;
estructura cambio;
bool ordenado=true;
while(ordenado){
ordenado=false;
for(i=lista.inicio;i->sig!=NULL;i=i->sig){
j=i->sig;
if(i->dato>j->dato){
cambio=i->dato;
i->dato=j->dato;
j->dato=cambio;
ordenado=true;
}
}
}
}
7w7

K-YreX

Creo que el segundo código no funciona en una lista vacía porque si esta está vacía la inicialización del <for> sería <i = NULL> y en la condición del <for> (i->sig != NULL) te daría un problema ya que no existe un puntero a siguiente.
En cambio en el primer código con el <if> haces una excepción para cuando esto ocurra. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Beginner Web

Cita de: YreX-DwX en 12 Diciembre 2018, 05:24 AM
Creo que el segundo código no funciona en una lista vacía porque si esta está vacía la inicialización del <for> sería <i = NULL> y en la condición del <for> (i->sig != NULL) te daría un problema ya que no existe un puntero a siguiente.
En cambio en el primer código con el <if> haces una excepción para cuando esto ocurra. :-X
Muchas gracias, tambien pensé lo mismo pero queria estar segura  ;-)
7w7