Pagina 1 di 1

[C] Sort

Inviato: lun 17 dic 2007, 19:15
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? :?

Inviato: lun 17 dic 2007, 19:51
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.

tuto

Inviato: lun 17 dic 2007, 19:53
da ccts2002

Codice: Seleziona tutto

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

Inviato: lun 17 dic 2007, 19:54
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 :'[