Ordinare un vettore significa ridisporre i suoi elementi

  • Slides: 26
Download presentation

Ordinare un vettore significa ridisporre i suoi elementi in modo tale che siano ordinati

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 i 23 17 6 9 81 3 j Confronto a due tutte le coppie del vettore e, se non sono ordinate tra loro, le scambio.

Ordinare un vettore significa ridisporre i suoi elementi in modo tale che siano ordinati

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 end Vordinato=V; end X=uint 32(rand(1, 50)*100); Ordinamento(X);

 • SELECTION SORT • INSERTION SORT Algoritmi “incrementali” Estende progressivamente una sottosequenza ordinata

• 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

SELECTION SORT 1 2 3 4 5 6 7 1 2 5 9 7

SELECTION SORT 1 2 3 4 5 6 7 1 2 5 9 7 6 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)

SELECTION SORT 1 2 3 4 5 6 7 1 2 5 9 7

SELECTION SORT 1 2 3 4 5 6 7 1 2 5 9 7 6 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

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

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

1 If m~=i

1 If m~=i

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

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

INSERTION SORT 1 2 3 4 5 6 7 1 2 5 9 7

INSERTION SORT 1 2 3 4 5 6 7 1 2 5 9 7 6 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

INSERTION SORT 1 2 3 4 5 6 7 1 2 5 9 7

INSERTION SORT 1 2 3 4 5 6 7 1 2 5 9 7 6 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

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

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

1 2 3 4 5 6 7 1 2 5 9 7 6 8

1 2 3 4 5 6 7 1 2 5 9 7 6 8

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

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

BUBBLE SORT Si basa su più scansioni (scorrimenti) del vettore Durante ciascuno scorrimento, coppie

BUBBLE SORT 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 1 7 3 10 5 12 2

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

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

ORDINAMENTO - Modificare i tre algoritmi per l’ordinamento in modo da ordinare un vettore

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

Esercizio: Atleta Realizza un programma in Mat. Lab che consente di creare un report

Esercizio: Atleta Realizza un programma in Mat. Lab 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 9 12 Domenic a 4 6. 2 6. 05 6. 4

Esercizio: Atleta giorni={'Lunedi', 'Martedi', 'Mercoledi', 'Giovedi', 'Venerdi', 'Sabato', 'Domenica'}; numero. Giorni=length(giorni); allenamento={}; for i=1:

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

giorni={'Lunedi', 'Martedi', 'Mercoledi', 'Giovedi', 'Venerdi', 'Sabato', 'Domenica'}; numero. Giorni=length(giorni); allenamento={}; for i=1: numero. Giorni

giorni={'Lunedi', 'Martedi', 'Mercoledi', 'Giovedi', 'Venerdi', 'Sabato', 'Domenica'}; numero. Giorni=length(giorni); allenamento={}; for i=1: numero. Giorni vettore. Misure=[]; misura. Salto=0; numero. Salti=0; disp(giorni{i}); while misura. Salto<6 misura. Salto=input('Inserisci la misura del salto: '); vettore. Misure=[vettore. Misure misura. Salto]; end allenamento{i}={giorni{i} length(vettore. Misure) vettore. Misure}; end allenamento migliori={}; for i=1: numero. Giorni miglior. Salto=max(allenamento{i}{3}); allenamento{i}{3}=miglior. Salto; end allenamento

Esercizi: CON FUNZIONI PREDEFINITE E INDICIZZAZIONE MATLAB - Generare un vettore di numeri casuali

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.

Generare un vettore di numeri casuali compresi tra 0 e 99; Contare quanti elementi

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(-50+100*rand(1, 10)) sum(V>sum(V)) V(find(V>sum(V)))=0

Dato un vettore di 10 elementi, sostituire l’elemento con valore minimo con il valore

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; disp(V);

Esercizio: Generare una matrice 5 x 5 contenente zeri. Generare un vettore di 5

Esercizio: Generare una matrice 5 x 5 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 40 34 6 12 11 40