Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Abril7 en 24 Abril 2017, 17:30 pm



Título: Método seleccion en C++, error.
Publicado por: Abril7 en 24 Abril 2017, 17:30 pm
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.

Código:
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;
}
    }
}


Título: Re: Método seleccion en C++, error.
Publicado por: CalgaryCorpus en 24 Abril 2017, 18:01 pm
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.


Título: Re: Método seleccion en C++, error.
Publicado por: Abril7 en 24 Abril 2017, 18:25 pm
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.


Título: Re: Método seleccion en C++, error.
Publicado por: MAFUS en 24 Abril 2017, 19:22 pm
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.