while(1) -> cicla all'infinito le istruzioni del blocco. Dal momento che il while cicla finchè la condizione tra parentesi è vera, e siccome 1 è sinonimo di vero in c (in realtà puoi scriverci qualsiasi numero diverso da 0), eseguirai all'infinito le istruzioni del blocco while
Di seguito ti riporto un insertion sort:
Codice:
void insertion_sort(int x[], int n)
{
int i, j, app;
for (i=1; i<n; i++) {
app = x[i];
j = i-1;
while ((j>=0) && (x[j]>app)) {
x[j+1] = x[j];
j--;
}
x[j+1] = app;
}
}
Funziona così: prendi l'elemento i-esimo dell'array e lo confronti con quelli precedenti, inserendolo appena l'elemento con cui lo stai confrontando è minore. Quindi, al primo passo, prendi il secondo elemento (i=1), lo confronti col primo (i=0) e se è minore lo porti in testa all'array; se prendessi il primo elemento (i=0) con cosa lo confronteresti?
Questa è comunque solo una filosofia d'implementazione - quella classica; potresti tranquillamente partire dal primo elemento (i=0) e confrontare verso destra mettendo gli elementi in fondo all'array