Salve ragazzi, sulle slide del mio professore di informatica è illustrato l'algoritmo di shell per quanto riguarda l'ordinamento.
Ve lo propongo nella forma cosi come è riportato.
Codice PHP:
void shell(int A[], int n) {
int i,j,salto=n/2;
while (salto > 0) {
for (i=salto;i<n;i++) {
j=i-salto;
while (j>=0) {
k=j+salto;
if(A[j]<=A[k]) { j=-1 /*esce*/ }
else {
scambia(A[j],A[k]);
j=j-salto;
}
}
}
salto = salto/2;
}
}
Tutto ok per quanto riguarda il funzionamento dell'algoritmo ma non riesco a capire perchè l'algoritmo dovrebbe fermarsi:
se il while(salto>0) dipende da salto = salto/2 se divido un numero intero per 2 non otterrò mai zero! La condizione while dipende forse dal fatto che ho definito salto come un intero quindi se
salto = 1 ----> salto /2 = 0??
L'algoritmo è giusto cosi come scritto?