[Java] Chiarimenti codice insertionSort
Ciao a tutti, volevo chiedervi una mano a capire bene il funzionamento del codice dell'algoritmo insertionSort (ordinamento per inserimento);
Il codice è questo:
public void insert (int key, Object value)
{
if (vSize == v.length)
v = resize (2*v.length);
int i = vSize;
//Riordinamento per inserimento
while ( i > 0 && v[i-1].getPriority() < key)
{
v = v[i-1];
i--;
}
v = new Impegno(key, (String) value);
vSize++;
}
Non riesco a comprendere bene la parte di codice in verde (mi scuso per l'impaginazione ma non riesco a sistemare il testo a dovere).
Qualcuno riuscirebbe a spiegarmelo?
Grazie mille a tutti
Il codice è questo:
public void insert (int key, Object value)
{
if (vSize == v.length)
v = resize (2*v.length);
int i = vSize;
//Riordinamento per inserimento
while ( i > 0 && v[i-1].getPriority() < key)
{
v = v[i-1];
i--;
}
v = new Impegno(key, (String) value);
vSize++;
}
Non riesco a comprendere bene la parte di codice in verde (mi scuso per l'impaginazione ma non riesco a sistemare il testo a dovere).
Qualcuno riuscirebbe a spiegarmelo?
Grazie mille a tutti
Risposte
Prova a dare un occhiata ad un sito tipo questo. Puoi scegliere diversi algoritmi e ti viene mostrata una animazione che passo dopo passo riordina l'array seguendo l'algoritmo scelto.
In pratica scambia il valore in posizione vSize con tutti quelli in posizioni precedenti che sono più grandi. Siccome la parte che lo precede è ordinata ci si ferma al primo elemento più piccolo che quindi fermerà l'iterazione.
In pratica scambia il valore in posizione vSize con tutti quelli in posizioni precedenti che sono più grandi. Siccome la parte che lo precede è ordinata ci si ferma al primo elemento più piccolo che quindi fermerà l'iterazione.
"apatriarca":
Prova a dare un occhiata ad un sito tipo questo.
Quel sito vale più di mille parole, veramente ben fatto (a noi la prof li faceva simulare con dei fogli numerati perdendo ogni volta mezzora di lezione).
Se può interessarti, tempo fa quando preparavo l'esame di algoritmi 1 avevo implementato in Java alcuni algoritmi di sort link (ciò vale solo a scopo didattico, nei progetti seri non implementare da zero ma basati su librerie testare e ottimizzate, non come la mia [nota]Ad esempio non sono mai riuscito a battere computazionalmente il sort di Java, neanche implementando lo stesso algoritmo usato[/nota]).