La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi di ordinamento

Presentazioni simili


Presentazione sul tema: "Algoritmi di ordinamento"— Transcript della presentazione:

1 Algoritmi di ordinamento
di un vettore

2 Ordinare un vettore significa ridisporre i suoi elementi in modo tale che siano ordinati tra di loro (l’ordinamento più comune è per valore crescente) 5 33 23 17 6 9 81 3 j i Confronto a due a due tutte le coppie del vettore e,se non sono ordinate tra loro, le scambio.

3 function Vordinato = ordinamento (V) len=length(V); for i=1:len-1
Ordinare un vettore significa ridisporre i suoi elementi in modo tale che siano ordinati tra di loro (l’ordinamento più comune è per valore crescente) function Vordinato = ordinamento (V) len=length(V); for i=1:len-1 for j=i+1:len if V(i)>V(j) temp=V(i); V(i)=V(j); V(j)=temp; end Vordinato=V; X=uint32(rand(1,50)*100); Ordinamento(X);

4 SELECTION SORT INSERTION SORT Algoritmi “incrementali” Estende progressivamente una sottosequenza ordinata finchè tutto il vettore diventa ordinato BUBBLE SORT Si basa su più “scansioni” del vettore Scambia elementi vicini finchè tutto il vettore è ordinato

5 SELECTION SORT SELECTION SORT 9 8 9 8
1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 9 8 Supponiamo che i primi k elementi del vettore siano ordinato, Es k=3 Come possiamo estendere l’ordinamento all’ elemento k+1 ? Selection sort: prendi il minimo tra gli n-k elementi rimanenti e spostalo nella posizione k+1 (con uno scambio)

6 SELECTION SORT 9 8 n = lunghezza del vettore, k all’inizio vale 1
2 3 4 5 6 7 9 8 n = lunghezza del vettore, k all’inizio vale 1 1.Prendi l’elemento in posizione k dove k-1 è il numero di elementi già ordinati 2.Trova il minimo tra gli n-k+1 elementi non ordinati 3.Scambia l’elemento in posizione k col minimo trovato 4. Aumenta k di 1 5.Se k < n torna al passo 1 Fine

7 7 7 7 7 7 7 Come funziona l’algoritmo SELECTION SORT: k=1 k=2 k=3 k=4
5 6 7 k=1 1 2 3 4 5 6 7 k=2 1 2 3 4 5 6 7 k=3 1 2 3 4 5 6 7 k=4 1 2 3 4 5 6 7 k=5 1 2 3 4 5 6 7 k=6

8 1 If m~=i

9 Esercizio: Modificare il codice in modo da visualizzare il numero di confronti e il numero di scambi effettuati

10 INSERTION SORT 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 9 8 Supponiamo che i primi k elementi del vettore siano ordinati, Es k=4 Come possiamo estendere l’ordinamento all’ elemento k+1 ? Selection sort: prendi l’elemento in posizione k+1 ed inseriscilo nella posizione corretta rispetto ai primi k elementi

11 INSERTION SORT 9 8 9 8 n = lunghezza del vettore, k all’inizio vale 2
1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 9 8 n = lunghezza del vettore, k all’inizio vale 2 1.Prendi l’elemento in posizione k nel vettore 2.Trova la posizione per l’elemento k nella sottosequenza ordinata 3.Se la posizione per l’elemento k è minore di k, allora bisogna scalare alcuni elementi già ordinati 4. Aumenta k di 1 4.Se k < n torna al passo 1 Fine

12 7 7 7 7 7 7 Come funziona l’algoritmo INSERTION SORT: k=2 k=3 k=4 k=5
1 2 3 4 5 6 7 k=2 1 2 3 4 5 6 7 k=3 1 2 3 4 5 6 7 k=4 1 2 3 4 5 6 7 k=5 1 2 3 4 5 6 7 k=6 1 2 3 4 5 6 7 k=7

13 1 2 3 4 5 6 7 9 8

14 Esercizio: Modificare il codice in modo da visualizzare il numero di confronti e il numero di scambi effettuati

15 BUBBLE SORT 10 12 Si basa su più scansioni (scorrimenti) del vettore
Durante ciascuno scorrimento, coppie di valori adiacenti non ordinate vengono scambiate Se durante una scansione non avviene nessuno scambio, il vettore è ordinato 1 2 3 4 5 6 7 10 12

16

17

18 Esercizio: Modificare il codice in modo da visualizzare il numero di confronti e il numero di scambi effettuati

19 ORDINAMENTO Modificare i tre algoritmi per l’ordinamento in modo da ordinare un vettore di 10 elementi in base al valore crescente dell’unità(cioè dell’ultima cifra a destra).

20 Esercizio: Atleta Lunedi Martedi Domenica 9 12 4 6.2 6.05 6.4
Realizza un programma in MatLab che consente di creare un report degli allenamenti di un atleta del salto in lungo. L’atleta si allena tutti i giorni provando a saltare ad una distanza di 6 metri, segnando le misure dei salti e ripetendo il salto finché questo riesce. Il report deve contenere Per ogni giorno della settimana: il giorno, il numero di salti e la distanza massima saltata. Lunedi Martedi Domenica 9 12 4 6.2 6.05 6.4

21 Esercizio: Atleta giorni={'Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','Domenica'}; numeroGiorni=length(giorni); allenamento={}; for i=1:numeroGiorni misuraSalto=0; numeroSalti=0; disp(giorni{i}); while misuraSalto<6 misuraSalto=input('Inserisci la misura del salto: '); numeroSalti=numeroSalti+1; end allenamento{i}={giorni{i} numeroSalti misuraSalto}; allenamento

22 giorni={'Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','Domenica'};
numeroGiorni=length(giorni); allenamento={}; for i=1:numeroGiorni vettoreMisure=[]; misuraSalto=0; numeroSalti=0; disp(giorni{i}); while misuraSalto<6 misuraSalto=input('Inserisci la misura del salto: '); vettoreMisure=[vettoreMisure misuraSalto]; end allenamento{i}={giorni{i} length(vettoreMisure) vettoreMisure}; allenamento migliori={}; migliorSalto=max(allenamento{i}{3}); allenamento{i}{3}=migliorSalto;

23 Esercizi: CON FUNZIONI PREDEFINITE E INDICIZZAZIONE MATLAB Generare un vettore di numeri casuali compresi tra 0 e 99; Contare quanti elementi sono maggiori del primo; Trovare la posizione del primo valore superiore al primo; Trovare la posizione dell’ultimo valore superiore al primo Generare un vettore di numeri casuali compresi tra -50 e 49; Contare quanti elementi sono maggiori della somma di tutti gli elementi; sostituire con 0 tali valori. CALCOLO DEL MINIMO Dato un vettore di 10 elementi, sostituire l’elemento con valore minimo con il valore della posizione che occupa. CALCOLO DEL MINIMO,MASSIMO E SCAMBIO - Dato un vettore di 10 elementi (riempito con valori random) scrivi un procedimento per scambiare di posto il valore minimo col valore massimo.

24 Generare un vettore di numeri casuali compresi tra 0 e 99; Contare quanti elementi sono maggiori del primo; Trovare la posizione del primo valore superiore al primo; Trovare la posizione dell’ultimo valore superiore al primo Generare un vettore di numeri casuali compresi tra -50 e 49; Contare quanti elementi sono maggiori della somma di tutti gli elementi; sostituire con 0 tali valori. SOLUZIONI ESERCIZI CON FUNZIONI PREDEFINITE E INDICIZZAZIONE V=floor(100*rand(1,10)) sum(V>V(1)) min(find(V>V(1))) max(find(V>V(1))) V=floor( *rand(1,10)) sum(V>sum(V)) V(find(V>sum(V)))=0

25 Dato un vettore di 10 elementi, sostituire l’elemento con valore minimo con il valore della posizione che occupa. SOLUZIONE ESERCIZI SUL CALCOLO DEL MINIMO V = floor(50*rand(1,10)); disp(V); pos=1; for i=1:length(V) if V(i)<V(pos) pos=i; end V(pos)=pos;

26 Esercizio: Generare una matrice 5x5 contenente zeri. Generare un vettore di 5 elementi random compresi tra 0 e 49 Riempire le righe della matrice con il contenuto del vettore: in ciascuna riga il contenuto del vettore sarà «ruotato» di 0,1,2,3 e 4 posizioni verso sinistra 34 6 12 11 40 34 6 12 11 40


Scaricare ppt "Algoritmi di ordinamento"

Presentazioni simili


Annunci Google