Método seleccion en C++, error.

Iniciado por Abril7, 24 Abril 2017, 17:30 PM

0 Miembros y 2 Visitantes están viendo este tema.

Abril7

Hola, hicé un código para ordenar por método de selección una lista doblemente enlanzada, segun yo funcionaba y todo bien, pero cuando lo revisé con mas de 10 elementos ya no funciona, solo con pocos. Si por favor alguien nota que hago mal, agradecería mucho que me lo dijera, muchas gracias de antemano.

void doubleList::orderSelection()
{   int min, aux;
if (first->next==NULL)
return;
    else{
    Node *p = first;
        while(p != NULL){
            min = p->element;
    Node *j = p ->next;
while(j != NULL){
            if(j->element < min){
                aux = min;
min = j->element;
                j->element = aux;
                p->element = min;
                j= p->next;
break;
}
            j=j->next;
}
aux = p->element;
min = aux;
p = p->next;
}
    }
}

CalgaryCorpus

Serviria si indentaras mejor el codigo, para leerlo mejor y si presentaras como estas probando el mismo. Tal vez el problema esta en la prueba y no en el codigo que muestras.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Abril7

Una disculpa, mira las pruebas:

Tengo una función rand para añadir los datos por cantidades, le pusé para añadir 7 datos que fueron: 478,224,169,0,334,467,41. Luego los "ordené" y quedaron así: 224,169,0,334,467,41,478.

Ahora un ejemplo que si funciona, hicé lo mismo pero ahora con 5 elementos, se añadieron: 41,467,334,0,169, estos si los ordenó correctamente.

MAFUS

El algoritmo debería buscar el mínimo valor de la lista entera y cambiarlo por el del puntero principal
pero
tu código busca el primer elemento menor al del puntero principal, intercambiarlo (o eso creo que hace) y saltar a la próxima del puntero principal.