Ordinare un vettore significa ridisporre i suoi elementi
- Slides: 26
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 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 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 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 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 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
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 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 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 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
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 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 numero di scambi effettuati
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 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: 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 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 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 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 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 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
- Vettore posizione e vettore spostamento zanichelli
- Lo stato e i suoi elementi costitutivi
- Contare ordinare
- Schema risoluzione problemi
- I romani condannarono catilina e tutti i suoi complici
- La materia e i suoi stati
- Rachele piange i suoi figli e non vuole essere consolata
- Campo vettoriale solenoidale
- Spazio bidimensionale
- Vettori episomali
- Vettore di espressione
- Flusso di un campo
- Distanza punto retta
- Plasmide
- Vettori unitari
- Vettore di espressione
- Pressione di radiazione zanichelli
- Antiparallelo vettore
- Elementi kalkulacije
- Elementi vrednovanja matematika
- Misure di protezione passiva
- Eiklīda algoritms
- Au elementi
- Quali sono gli elementi fondamentali dello stato
- Izrada projekta primer
- D elementi
- Matematicki elementi karte