190 likes | 370 Views
Gli Algoritmi di ordinamento. Gli Algoritmi di Ordinamento - Generalità. L’ordinamento è il processo che permette di ottenere,a partire da un insieme di dati omogenei, un insieme ordinato, secondo un ordine crescente o decrescente,. Assunzione :
E N D
Gli Algoritmi di ordinamento Algoritmi di ordinamento
Gli Algoritmi di Ordinamento - Generalità L’ordinamento è il processo che permette di ottenere,a partire da un insieme di dati omogenei, un insieme ordinato, secondo un ordine crescente o decrescente,. Assunzione : • consideriamo solo l’ordinamento di vettori contenenti numeri o lettere; I metodi considerati per descrivere l’ordinamento di un vettore sono : • Ordinamento per selezione • Ordinamento per scambio Algoritmi di ordinamento
Ordinamento per selezione/Selection-sort L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene poi ricercato nuovamente quello maggiore e scambiato con il secondo e così via fino all’ultimo elemento. Obiettivo:ottenere un insieme di elementi,ordinato in maniera decrescente Algoritmi di ordinamento
Selection Sort – L’Algoritmo I passi da seguire sono i seguenti : • Posizionamento sul primo elemento dell’array • Ricerca dell’elemento più grande e scambio con il primo elemento dell’array • Posizionamento sul secondo elemento dell’array • Ricerca dell’elemento più grande tra gli N-1 elementi rimasti e scambio con il secondo elemento dell’array • Posizionamento sul terzo elemento dell’array • Ricerca dell’elemento più grande tra gli N-2 elementi rimasti e scambio con il terzo elemento dell’array • Tale procedimento viene ripetuto N-1 volte Osservazione : Per implementare l’Algoritmo abbiamo bisogno di 2 indici : • Uno che tiene conto della posizione in cui si trova l’elemento da ordinare ( primo, secondo, terzo, … ) • Uno che permette di scorrere l’array alla ricerca del valore maggiore Algoritmi di ordinamento
Ordinamento per selezione Esempio vettore A Passo 1 Passo 2 Passo 3 Algoritmi di ordinamento
Selection-sort il codice 1/3 /* Algoritmo di Selection Sort */ #include <stdio.h> // definisco la dimensione massima del vettore #define MAXDIM 20 main() { // La dichiarazione delle variabili int i,j,N,temp; int V[MAXDIM]; // Inserimento della dimensione del vettore con controllo che sia minore o uguale //alla dimensione massima do{ printf("\n Inserire la dimensione del vettore non superiore a %d\n",MAXDIM); // inserimento del valore da tastiera scanf("%d",&N); }while(N>MAXDIM); Algoritmi di ordinamento
Selection-sort il codice 2/3 for (i=0;i<N;i++) // inserimento del vettore { printf("Inserire l'elemento %d : ",i+1); scanf("%d",&V[i]); } for (i=0;i<N-1;i++) { //Blocco di Istruzioni - S1 j = i+1; do{ if ( V[ i ] <[ j ] ) { // effettuare scambio degli elementi temp = V[ i ]; V[ i ] = V[ j ]; V[ j ] = temp; } j = j + 1; }while( j < N ); } Algoritmi di ordinamento
Selection-sort il codice 3/3 // visualizzazione del vettore ordinato mediante l'algoritmo printf("Il vettore ordinato e\' il seguente : \n"); for (i=0;i<N;i++) printf("%d ",V[i]); printf("\n"); } // chiude il main Algoritmi di ordinamento
Ordinamento per scambio Si scandisce tutto l’insieme, se due elementi vengono trovati fuori posto si scambiano tra loro. Questo procedimento viene ripetuto fino a quando non si hanno più cambiamenti. • Bubble Sort – vengono effettuati confronti ripetuti e, se necessario, scambi di elementi adiacenti. Un vettore di N elementi viene letto per intero N – 1 volte sempre partendodall’ultimo elemento. Algoritmi di ordinamento
Ordinamento per scambio/Bubble-Sort Osservazione : Per implementare l’Algoritmo abbiamo bisogno di 2 indici : • Uno che tiene conto della posizione in cui si trova l’elemento già ordinato( fino al primo, fino al secondo, fino al terzo, … ) • Uno che permette di scorrere l’array alla ricerca del valore minimo vettore iniziale a b c d Passo 1d a b c Passo 2d c a b Passo 3d c b a Algoritmi di ordinamento
Bubble-sort codice 1/3 #include <stdio.h> // definisco la dimensione massima del vettore #define MAXDIM 20 main() { // La dichiarazione delle variabili int i,j,N,temp; int V[MAXDIM]; // Inserimento della dimensione del vettore con //controllo che sia minore o uguale alla dimensione //massima do{ printf("\n Inserire la dimensione del vettore non superiore a %d\n",MAXDIM); // inserimento del valore da tastiera scanf("%d",&N); }while(N>MAXDIM); Algoritmi di ordinamento
Bubble-sort codice 2/3 for (i=0;i<N;i++) // inserimento del vettore { printf("Inserire l'elemento %d : ",i+1); scanf("%d",&V[i]); } for (i=0;i<N-1;i++) { j = N -1; //Posizionamento ad ogni step i sull’ultimo elemento do{ if ( V[ j-1 ] <V[ j ] ) { // effettuare scambio degli elementi adiacenti temp = V[ j-1 ]; V[ j-1 ] = V[ j ]; V[ j ] = temp; } j = j - 1; }while( j > i ); } Algoritmi di ordinamento
Bubble-sort codice 3/3 // visualizzazione del vettore ordinato mediante l'algoritmo printf("Il vettore ordinato e\' il seguente : \n"); for (i=0;i<N;i++) printf("%d ",V[i]); printf("\n"); } // chiude il main Algoritmi di ordinamento
Bubble-sort versione ottimizzata Una versione ottimizzata dell’algoritmo, termina se non avvengono scambi anche se vengono comunque effettuati i confronti per ogni esecuzione del ciclo più interno. Ossia il ciclo più interno di confronto degli elementi adiacenti viene eseguito per intero, ma se in tale ciclo non avvengono scambi, ossia il vettore è già ordinato, il programma termina. Osservazione : Per tale implementazione abbiamo bisogno di : • Una variabile del tipo vero – falso che indichi se sono avvenuti scambi nel ciclo più interno • Modificare la condizione del ciclo più esterno perché dobbiamo chiedere che si esca dal programma dopo N -1 passi oppure se non si sono effettuati scambi Algoritmi di ordinamento
Bubble-sort versione ottimizzata1/2 #include <stdio.h> // definisco la dimensione massima del vettore #define MAXDIM 20 main() { // La dichiarazione delle variabili int i,j,N,temp, scambio; int V[MAXDIM]; // Inserimento della dimensione del vettore con //controllo che sia minore o uguale alla dimensione //massima do{ printf("\n Inserire la dimensione del vettore non superiore a %d\n",MAXDIM); // inserimento del valore da tastiera scanf("%d",&N); }while(N>MAXDIM); Algoritmi di ordinamento
Bubble-sort versione ottimizzata 2/3 for (i=0;i<N;i++) { printf("Inserire l'elemento %d : ",i+1); scanf("%d",&V[i]); } scambio = 1; for (i=0;i<N-1 && scambio ==1;i++) { j = N -1; // ordinamento scambio = 0; do{ if ( V[ j-1 ] < V[ j ] ) { // effettuare scambio degli elementi adiacenti temp = V[ j-1 ]; V[ j-1 ] = V[ j ]; V[ j ] = temp; scambio =1;} j = j - 1; }while( j > i ); } Algoritmi di ordinamento
Bubble-sort versione ottimizzata 3/3 // visualizzazione del vettore ordinato printf("Il vettore ordinato e\' il seguente : \n"); for (i=0;i<N;i++) printf("%d ",V[i]); printf("\n"); } // chiude il main Algoritmi di ordinamento