Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
void insert(int *a, int n){
int i, j, ap;
for(i = 1; i < n; i++){
ap = a[i];
j = i-1;
while((j >= 0) && (a[j] > ap)){
a[j+1] = a[j];
j--;
}
a[j+1] = ap;
}
}
Funziona a dovere, però sto cercando di trasformare tutto il while che mi sposta gli elementi del vettore in unfor (lo so che è una sciochezza ...), quindi ho cercato di fare in questo modo;
void insert(int *a, int n){
int i, j, ap;
for(i = 1; i < n; i++){
ap = a[i];
for(j = i-1; (j >= 1) && (a[j] > ap); j--);
a[j+1] = a[j]
a[j+1] = ap;
}
}
Così però la procedura non fa il suo dovere ... in pratica se do in pasto un vettore che ha i seguenti elementi: a[4, 2, 0, 9, 7], con il primo (classico) metodo mi viene ordinato senza problemi, con il secondo invece ricevo questo tipo di output: a[4, 0, 2, 7, 9] ...
* un punto e virgola dopo il for¹
* ( j >= 1) sempre nel for
¹ in realtà credo sia un errore di trascrizione, visto che manca nell'operazione successiva... inoltre quel codice che hai postato dovrebbe dare risultati ben più assurdi.