Quello che fa è:
- Trascina l' elemento massimo dell' array [0....k] in posizione k;
- Decrementa k.
Quindi se hai l' array {10,4 7,2 1} dopo la prima iterazione del for esterno in v[4] c'è 10, e k viene decrementato perchè non c'è bisogno di riconsiderare l' elemento 4,dato che è il massimo.
Se k partiva da 0 e arrivava fino a n-1 non va bene perchè il ciclo interno verrebbe eseguito prima su un singolo elemento, poi su 2, poi su 3 .... e non avrebbe l' effetto di ordinare completamente l' array,non ne sono sicuro ma penso che alla fine del ciclo avresti {4,2,7,10,1}.
Per farlo funzionare dovresti modificare anche il for interno:
Il risultato sarebbe identico, ha cioè l' effetto di ordinare l' array, ma in modo diverso.codice:for (int k=1; k<=n-1; k++) for (int i=n-1; i>=k; i--) if (v[i] < v[i-1]) swap(v[i],v[i+1]);
Invece di trascinare gli elementi più grandi nelle ultime posizioni del vettore, trascina gli elementi più piccoli nelle posizioni iniziali del vettore.

Rispondi quotando