Si lo sapevo, scusa se non ti ho risposto subito ma mi sono sentito male di nuovo a scuola e ho passato la notte all'ospedale. Pensavo bastasse "if(max!=inizio)" ma va modificato con "if(max==inizio)max->min;" così funziona ed è ancora abbastanza veloce.
//Posto la modifica, ma senza commenti fanno più confusione che altro
void SWAP(a,b)
aus->a;
a->b;
b->aus;
END SWAP
void ORDINA(vet[], inizio, fine)
if(inizio>=fine) RETURN;
i;
min->inizio;
max->fine;
for i->inizio; i<fine; i++
if(vet]i]>vet[max])max=i;
else if(vet]i]<vet[min])min=i;
end for
SWAP(@vet[min],@vet[inizio]);
if(max==inizio)max->min;
SWAP(@vet[max],@vet[fine]);
ORDINA(vet,inizio+1,fine-1);
RETURN;
END ORDINA
Ultima modifica effettuata da lorelapo il 05/05/2007 alle 12:05 |