1 / 17

Gli Algoritmi di ordinamento

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 :

Download Presentation

Gli Algoritmi di ordinamento

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gli Algoritmi di ordinamento Algoritmi di ordinamento

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

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

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

  5. Ordinamento per selezione Esempio vettore A Passo 1 Passo 2 Passo 3 Algoritmi di ordinamento

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

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

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

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

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

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

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

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

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

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

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

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

More Related