View Full Version : [C++] Algoritmi di ordinamento...dubbi
mistergks
09-11-2012, 17:46
Ho provato a fare un algoritmo di ordinamento di un array di interi...in ordine crescente..
non funzionava bene...e ho cercato un pò sul web...
...ho trovato questo:
void ordina(vettore v,int d)
{
int i,j,mem,n;
n=d;
for(i=0;i<d;i++)
{
for(j=0;j<n-1;j++)
{
if(v[j]>v[j+1])
{
mem=v[j];
v[j]=v[j+1];
v[j+1]=mem;
}
}
n=n-1;
}
}
...e ho notato che il mio errore è quello sul for...cioè io ne mettevo uno solo, mentre qua ce ne sono due!
Non ho capito il perchè...qualcuno sa spiegarmelo?!
:rolleyes: :muro: :muro: :muro:
Supponi che il tuo array di partenza sia questo:
[5, 4, 3, 2, 1, 0]
Con un solo ciclo come lo hai scritto tu succede questo.
Il for fa il suo primo giro. Gli elementi 0 e 1 sono confrontati tra di loro. Il 5 è maggiore di 4 quindi i due elementi sono scambiati di posto. A questo punto hai l'array ordinato in questo modo:
[4, 5, 3, 2, 1, 0]
Il for non ha ancora terminato quindi continua confrontando gli elementi 1 e 2. Anche questa volta 5 è maggiore di 3 quindi i due sono scambiati. La stessa cosa succederà per il resto dei cicli. 5 è il valore più grande dell'array e verrà spostato di 1 posizione verso destra ad ogni giro del for.
Una volta terminati gli n-1 giri il 5 si trova nella giusta posizione a destra.
[4, 3, 2, 1, 0, 5]
Il resto degli elementi però è rimasto nell'ordine di prima che è sbagliato quindi non hai ancora finito di ordinare.
Se provi a lanciare un'altra volta il for sarà il 4 ad essere spostato verso destra fino a che non arriverà nella giusta posizione. Essendoci n elementi per essere sicuro che tutti siano nella giusta posizione devi ripetere il tuo for n-1 volte.
mistergks
12-11-2012, 11:58
Supponi che il tuo array di partenza sia questo:
[5, 4, 3, 2, 1, 0]
Con un solo ciclo come lo hai scritto tu succede questo.
Il for fa il suo primo giro. Gli elementi 0 e 1 sono confrontati tra di loro. Il 5 è maggiore di 4 quindi i due elementi sono scambiati di posto. A questo punto hai l'array ordinato in questo modo:
[4, 5, 3, 2, 1, 0]
Il for non ha ancora terminato quindi continua confrontando gli elementi 1 e 2. Anche questa volta 5 è maggiore di 3 quindi i due sono scambiati. La stessa cosa succederà per il resto dei cicli. 5 è il valore più grande dell'array e verrà spostato di 1 posizione verso destra ad ogni giro del for.
Una volta terminati gli n-1 giri il 5 si trova nella giusta posizione a destra.
[4, 3, 2, 1, 0, 5]
Il resto degli elementi però è rimasto nell'ordine di prima che è sbagliato quindi non hai ancora finito di ordinare.
Se provi a lanciare un'altra volta il for sarà il 4 ad essere spostato verso destra fino a che non arriverà nella giusta posizione. Essendoci n elementi per essere sicuro che tutti siano nella giusta posizione devi ripetere il tuo for n-1 volte.
Perfetto..thanks!!
Inviato dal mio GT-I9003 usando Tapatalk
mistergks
15-11-2012, 00:26
scusate ma xke porsi il problema di come ordinare un array qnd ci sono algoritmi di ordinamento già fatti e testati da usare?
a scopo didattico!!! e per lo stesso motivo per cui ancora i bimbi imparano le addizioni a mano anche se esiste la calcolatrice!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.