Swap è una funzione per scambiare elementi, se la scrivi correttamente ciò non influenza l' esito dell' ordinamento.
Ma la compare è quella che fa la differenza, perchè se confronti a e b devi scegliere che risultato far ritornare alla compare, e puoi scegliere se ritornare a-b oppure b-a, il che cambia tutto ed è la chiave per avere un ordinamento crescent eo decrescente.
Questa è la funzione qsort di stdlib.h :
http://www.cplusplus.com/reference/c...cstdlib/qsort/
Ritornare a-b (sono puntatori dunque *a-*b) causa un ordinamento crescente, ritornare *b-*a cause un ordinamento decrescente.
L' istruzione sarà quasi sicuramente analoga a questa:
Il che rende la funzione molto flessibile perchè si può scegliere un qualsiais criterio di ordinamento (nel caos di qsort, si possono ordinare interi, ma anche stringhe o strutture di qualsiasi tipo, basta scrivere bene la swap e la compare).codice:if(compare(v[i],v[i-1])<0) swap(&v[i],&v[i-1]);
La swap ha come argomenti puntatori perchè gli argomenti delle funzioni vengono sempre copiate come variabili locali alla funzione, per cui scambiare quegli elementi nella swao (se non sono puntatori) sarebbe sterile: vengono solo cambiate quelle variabili locali e quelle originali rimangono invariate.
Sapendo queste cose, prova a scrivere la swap,la descending e ascending e prova a risolvere l' esercizio (posta il codice).