Che facciata, è solo una banale ottimizzazione del Selection Sort, solo che la mia sconoscenza di questo non mi ci ha fatto pensare, cmq non ho trovato una sua implementazione, anche se il procedimento è alquanto banale.
void SWAP(a,b)
aus->a;
a->b;
b->aus;
END SWAP
void ORDINA(vet[], inizio, fine)
if(inizio>=fine) RETURN;#asserzione per finire la
#ricorsione
i; #contatore
min->inizio; #indicizza l'elemento minimo
max->fine;#indicizza il massimo
#trovo il massimo ed il minimo
for i->inizio; i<fine; i++
if(vet]i]>vet[max])max=i;
else if(vet]i]<vet[min])min=i;
end for
#sposto il minimo all' inizio
SWAP(@vet[min],@vet[inizio]);
if(max!=inizio)#se non lo ho già fatto
#involontariamente
SWAP(@vet[max],@vet[fine]);#sposto in fondo il
#massimo
ORDINA(vet,inizio+1,fine-1);#faccio lo stesso con
#la sottosequenza
RETURN;
END ORDINA
Scusate, non sapete che rabbia quando lo ho scoperto.
Ultima modifica effettuata da lorelapo il 03/05/2007 alle 19:04 |