[C] Sort

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

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.
Rispondi
Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

[C] Sort

Messaggio da DaD »

Ho creato questa procedura per l'Insert Sort.

Codice: Seleziona tutto

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;

Codice: Seleziona tutto

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] ...

Cosa sbaglio? :?

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Così, ad occhio ci sono due errori:

* 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.

Avatar utente
ccts2002
Linux 1.x
Linux 1.x
Messaggi: 155
Iscritto il: gio 9 nov 2006, 23:20
Località: milano - trieste - catania
Contatta:

tuto

Messaggio da ccts2002 »

Codice: Seleziona tutto

(j>=1)
...gallows, mi hai anticipato di poco....

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Si scusate, è un errore di trascrizione, ho scritto la seconda procedura a mano perchè il codice c'è lo sul laptop.
EDIT: Era l'indice j, pardon :'[

Rispondi