Sei sulla pagina 1di 101

Fondamenti di Informatica

Algoritmi di Ricerca e Ordinamento


Ing. F. Clarizia
Dip. di Ingegneria informatica e Ingegneria elettrica,

Facolt di Ingegneria, Universit di Salerno


Via P. don Melillo 1, 84084 Fisciano (SA)

E-mail: fclarizia@unisa.it

Materiale didattico
prodotto dal
prof. A. Della Cioppa

domenica 29 novembre 2009


Algoritmi di ricerca
Per ricerca si intende qui il procedimento di
localizzare una particolare informazione in
un elenco di dati

Il metodo di ricerca dipende da come le


informazioni sono organizzate

Il problema della ricerca:


Dato un insieme L = {a1 ,a2 ,...,an } di n elementi
distinti e un elemento x, determinare se x appartiene
all'insieme.
2

domenica 29 novembre 2009


Ricerca lineare
lunico metodo per localizzare un particolare
elemento se non si hanno informazioni circa lordine
degli elementi nellinsieme

Lalgoritmo nella sua formulazione pi generale pu


essere espresso come segue:
Si parte dal primo elemento e si procede esaminando
uno per uno tutti gli elementi fino a quando non si
giunge ad una delle due condizioni
Lelemento cercato stato individuato nella posizione i
Abbiamo scandito tutti gli elementi dellinsieme senza aver
trovato lelemento x da cercare

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5
Passo 1 i=1
75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5
Passo 1 i=1
75 12 57 30 3

confronto 75 con 57 sono diversi

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3
Passo 2 i=2

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3
Passo 2 i=2

confronto 12 con 57 sono diversi

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3

Passo 3 i=3

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3

Passo 3 i=3

confronto 57 con 57 sono uguali

domenica 29 novembre 2009


Ricerca lineare
I caso
lelemento presente 1 2 3 4 5

75 12 57 30 3

elemento da cercare = 57
1 2 3 4 5

75 12 57 30 3

Passo 3 i=3

Lelemento 57
si trova
confronto 57 con 57 sono uguali alla posizione
di indice 3
4

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5
Passo 1 i=1
75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5
Passo 1 i=1
75 12 57 30 3

confronto 75 con 1 sono diversi

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 2 i=2

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 2 i=2
confronto 12 con 1 sono diversi

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 3 i=3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 3 i=3
confronto 57 con 1 sono diversi

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 4 i=4

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 4 i=4
confronto 30 con 1 sono diversi

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 5 i=5
5

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

Passo 5 i=5
5
confronto 3 con 1 sono diversi

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

domenica 29 novembre 2009


Ricerca lineare
II caso
lelemento non 1 2 3 4 5
presente
75 12 57 30 3

elemento da cercare = 1
1 2 3 4 5

75 12 57 30 3

i=6 >= n=5

Lelemento non
presente
nellinsieme
5

domenica 29 novembre 2009


Ricerca lineare
start

i=1

elemento V [i]
and
i<=n

si
i = i+1
no
no si
i <=n

Elemento Elemento
Non trovato trovato in posizione i

end

domenica 29 novembre 2009


Ricerca lineare
Un vettore si dice ordinato in senso crescente se
lelemento di indice 2 non minore dellelemento di
indice 1, lelemento di indice 3 non minore
dellelemento di indice 2, e cos via

Per un vettore ordinato possibile una variante


della ricerca lineare:
Se lattuale valore del vettore da esaminare pi
grande dellelemento da cercare possiamo essere sicuri
che lelemento non presente nel vettore

domenica 29 novembre 2009


Ricerca binaria
un algoritmo molto pi efficiente

quello che usiamo per cercare una parola


in un vocabolario

Si pu applicare solo su vettori ordinati

domenica 29 novembre 2009


Ricerca binaria
Si confronta lelemento da cercare con lelemento
che si trova a met del vettore. Se lelemento
individuato non uguale a quello cercato si
prosegue la ricerca nel semivettore inferiore o
superiore a seconda che il valore da cercare sia pi
piccolo o pi grande dellelemento che si trova a
met.
Il procedimento continua iterativamente in modo da
suddividere i sottovettori via via individuati.
La ricerca termina con successo quando lelemento
V[i] considerato ad un certo passo proprio uguale
al valore cercato.
La ricerca termina con insuccesso quando non
posso pi suddividere il vettore
9

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

10

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 < 23)

10

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

10

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 > 5)

10

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 > 5)

passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

10

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 10 primo ultimo

passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 > 5)

passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (10 == 10)


10

domenica 29 novembre 2009


Ricerca binaria
start

min = 1

max = N

med = (max+min)/2

elemento V [med] no
and
min < max
si
no si
elemento > V [med]

max = med - 1 min = med + 1

no si
max > min
Elemento Elemento
Non trovato trovato in posizione med

end 11

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 > 5)

12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 > 5)

passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 > 5)

passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 10)

12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 > 5)

passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 10)

passo 4 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
12

domenica 29 novembre 2009


Ricerca binaria: algoritmo
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 < 23)

passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11

elemento di mezzo (8 > 5)


Nellintervallo da considerare lindice
passo 3 1 3 5 10 15 23 31 primo
47 maggiore
47 56 64
di ultimo
1 2 3 4 5 6 7 8 9 10 11
Lelemento non presente nel vettore
elemento di mezzo (8 < 10)

passo 4 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
12

domenica 29 novembre 2009


Ricerca binaria
function pos=ricerca_bin(x, vet)
num_el = numel(vet);
inf=1;
sup=num_el;
med=0;
trovato=0;
while (~trovato && (inf<=sup))
med=floor((inf+sup)/2);
if vet(med) == x
trovato=1;
else
if vet(med)> x
sup = med-1;
else
inf=med+1;
end
end
end
if trovato
pos=med;
else
pos=-1;
end 13

domenica 29 novembre 2009


Ricerca Lineare
Descrizione del Problema
Scrivere una funzione per la ricerca
dellinformazione info in un vettore non
ordinato avente n elementi di un certo tipo.
In particolare la funzione deve produrre una
indicazione sullesistenza dellinformazione
nel vettore e, nel caso esista, la posizione.
Si ipotizza che nel caso non esista la
posizione sia definita come 0.

14

domenica 29 novembre 2009


Ricerca Lineare
Descrizione delle Funzioni
Parametri di Input : [v,info] vettore di ingresso ed
informazione da ricercare
Parametri di Output : [msg, posiz] variabile contenente
il messaggio sullesito della ricerca e posizione
allinterno del vettore
Variabili Locali : [i,trovato,n] contatore di ciclo, variabile
binaria che indica se il confronto ha avuto successo
o meno e riempimento del vettore
Funzioni Richiamate : length calcolo del riempimento
del vettore

15

domenica 29 novembre 2009


Ricerca Lineare

Implementazione dellalgoritmo

Esempio duso

16

domenica 29 novembre 2009


Ricerca Binaria
Descrizione del Problema
Scrivere una funzione per la ricerca
dellinformazione info in un vettore ordinato
in senso crescente avente n elementi di un
certo tipo. In particolare la funzione deve
produrre una indicazione sullesistenza
dellinformazione nel vettore e, nel caso
esista, la posizione. Si ipotizza che nel caso
non esista la posizione sia definita come 0.

17

domenica 29 novembre 2009


Ricerca Binaria
Descrizione delle Funzioni
Parametri di Input : [v,info] vettore di ingresso ed
informazione da ricercare
Parametri di Output : [msg, posiz] variabile contenente il
messaggio sullesito della ricerca e posizione allinterno
del vettore
Variabili Locali : [i, trovato, n, ei, es, medio] contatore di
ciclo, variabile binaria che indica se il confronto ha avuto
successo o meno, il riempimento del vettore, estremo
inferiore, estremo superiore e punto medio del
sottoinsieme di ricerca
Funzioni Richiamate : length calcolo del riempimento del
vettore

18

domenica 29 novembre 2009


Ricerca Binaria

Implementazione dellalgoritmo

Esempio duso

19

domenica 29 novembre 2009


Ricerca del Valore max in un vettore
Descrizione del Problema
Scrivere una funzione che determini il massimo in un
vettore formato da n elementi di un certo tipo

Descrizione delle Funzioni


Parametri di Input : [v] vettore di ingresso
Parametri di Output : [max] variabile contenente il
massimo del vettore
Variabili Locali : [i, n] contatore di ciclo, il
riempimento del vettore
Funzioni Richiamate : length per il calcolo del
riempimento del vettore

20

domenica 29 novembre 2009


Ricerca della Posizione del valore minimo di un vettore

Descrizione del Problema


Scrivere una funzione che determini la posizione del valore minimo di
un vettore formato da n elementi di un certo tipo

Descrizione delle Funzioni


Parametri di Input : [v] vettore di ingresso
Parametri di Output : [posiz] variabile contenente la
posizione del minimo del vettore
Variabili Locali : [i, n] contatore di ciclo, il
riempimento del vettore,
Funzioni Richiamate : length per il calcolo del
riempimento del vettore

21

domenica 29 novembre 2009


Minimo e Massimo in una Matrice

Descrizione del Problema


Scrivere una funzione che determini il valore minimo ed il valore
massimo di una matrice nXm elementi di un certo tipo

Descrizione delle Funzioni


Parametri di Input : [A] matrice di ingresso
Parametri di Output : [min,max] variabili contenenti il
minimo ed il massimo della matrice
Variabili Locali : [i, j, n, m] indice di riga, indice di
colonna, numero di righe, e numero di colonne
della matrice
Funzioni Richiamate : size per il calcolo del numero
di righe e di colonne della matrice
22

domenica 29 novembre 2009


Algoritmi di ordinamento
Ordinare un vettore di informazioni significa
effettuare una permutazione in modo da rispettare
una relazione dordine tra gli elementi del vettore

Il tipo base del vettore deve essere un tipo ordinato


(su cui si possono usare gli operatori di relazione <,
<=, >, >=)

23

domenica 29 novembre 2009


Algoritmo di Bubble Sort
La caratteristica dominante dellalgoritmo lo
scambio di due elementi.
Il metodo consiste nel confrontare coppie di elementi
adiacenti ed effettuare uno scambio nel caso in cui gli
elementi non siano in ordine, fino a che tutti gli
elementi siano ordinati
Si effettuano diverse scansioni degli elementi del
vettore: ad ogni passo si confronta ogni elemento A[j]
con lelemento adiacente A[ j+1] e si effettua uno
scambio nel caso in cui risulti A[ j+1] < A[ j ].
Inizialmente j deve variare tra 1n-1; nel passo
successivo tra 1n-2; nellultimo passo tra 1..2

domenica 29 novembre 2009


Algoritmo di Bubble Sort
Si pu quindi introdurre un indice i che ad ogni
passo definisca qual lultimo valore di j
Se consideriamo il vettore in posizione verticale e
gli elementi come delle bollicine in un contenitore
dacqua, con pesi diversi a seconda del valore degli
elementi, ad ogni passo possiamo immaginare che
salga a galla lelemento leggero tra quelli
considerati

domenica 29 novembre 2009


Algoritmo di Bubble Sort

Itera per i che varia da n a 1


Itera per j che varia da 1 a i
Se A[ j ] > A[ j + 1 ]
Allora Scambia A[ j+1 ] e A[ j ]

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
25 14 16 10 8

j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 25 16 10 8

j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 25 16 10 8
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 25 10 8
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 25 10 8
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 10 25 8
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 10 25 8
j i
j+1
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 10 8 25
j i
j+1
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 10 8 25
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 16 10 8 25
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 10 16 8 25
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 10 16 8 25
j i
j+1
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 10 8 16 25
j i
j+1
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
14 10 8 16 25
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
10 14 8 16 25
j j+1 i
Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
10 14 8 16 25
j i
j+1 Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
10 8 14 16 25
j i
j+1 Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
10 8 14 16 25
j i
j+1 Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Bubble Sort
n=5

1 2 3 4 5
8 10 14 16 25
j i
j+1 Itera per i che varia da n a 2
Itera per j che varia da 1 a i-1
Se A[ j ] > A[j + 1]
Allora Scambia A[ j+1] e A[ j ];

domenica 29 novembre 2009


Algoritmo di Selection Sort
Lidea di base del Selection Sort cercare di
volta in volta il minimo del vettore per gli
elementi ancora non ordinati e posizionare
lelemento trovato nella posizione
immediatamente successiva allultimo
elemento ordinato

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
10 25 8 14 16
i sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
10 25 8 14 16
i min sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 25 10 14 16
i min sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 25 10 14 16
i sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 25 10 14 16
i min sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 10 25 14 16
i min sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 10 25 14 16
i sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 10 25 14 16
i min sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 3 5
4
8 10 14 25 16
i min sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 10 14 25 16
i sup
inf

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 10 14 25 16
i sup
inf min

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Selection Sort
n=5

1 2 3 4 5
8 10 14 16 25
i sup
inf min

Itera per i che varia da 1 a n-1


Trova il minimo tra i ed n
Scambia A[i] con A[indiceMinimo]

domenica 29 novembre 2009


Algoritmo di Bubble Sort

Descrizione delle Funzioni

Parametri di Input : [v] vettore di ingresso

Parametri di output : [v] vettore ordinato in uscita

Variabili locali : [i, n, imin, temp] rispettivamente


contatore del ciclo, riempimento del vettore, indice del
minimo corrente dellinsieme disordinato e variabile di
appoggio per effettuare lo scambio ai fini
dellaccodamento

Funzioni Richiamate: length per il calcolo del


riempimento del vettore
30

domenica 29 novembre 2009


Algoritmo di Bubble Sort
function [vett_ord]=bubble_sort(vettore)
disp(vettore);
num_el=numel(vettore);
i = 0;
j = 0;
temp = 0;
for i=num_el:-1:1
for j=1:1:i-1
if (vettore(j) > vettore(j+1))
temp = vettore(j);
vettore(j) = vettore(j+1);
vettore(j+1) = temp;
end
end
end
vett_ord=vettore;
end

31

domenica 29 novembre 2009


Algoritmo di Bubble Sort

Esempio di Implementazione

Caso duso

32

domenica 29 novembre 2009


Algoritmo di Selection Sort

Descrizione delle Funzioni

Parametri di Input : [v] vettore di ingresso

Parametri di output : [v] vettore ordinato in uscita

Variabili locali : [i, n, imin, temp] rispettivamente


contatore del ciclo, riempimento del vettore, indice del
minimo corrente dellinsieme disordinato e variabile di
appoggio per effettuare lo scambio ai fini
dellaccodamento

Funzioni Richiamate: length per il calcolo del


riempimento del vettore

domenica 29 novembre 2009


Algoritmo di Selection Sort
function [v_ord]=select_sort(vettore) function pos=trova_min(v, inizio, fine)
disp(vettore); pos=inizio;
for i=inizio:1:fine
i = 1; if v(i) <= v(pos)
temp = 0; pos=i;
indiceMinimo=1; end
array_len=numel(vettore); end

for i=1:1:array_len
function [x,y]=scambia(x,y)
indiceMinimo = trova_min(vettore, i, array_len);
temp=x;
[vettore(i), vettore(indiceMinimo)] = scambia
( vettore(i),vettore(indiceMinimo)); x=y;
end y=temp;
v_ord=vettore; end
end

domenica 29 novembre 2009


Algoritmo di Selection Sort

Esempio di Implementazione

Caso duso

domenica 29 novembre 2009