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;
}
}
}
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.
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.
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.