• Non ci sono risultati.

Corso di Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Corso di Fondamenti di Informatica"

Copied!
8
0
0

Testo completo

(1)

Claudio De Stefano - Corso di Fondamenti di Informatica

1

Corso di Fondamenti di Informatica

Gli algoritmi di base sul tipo array:

ordinamento e ricerca

(2)

Algoritmi di ordinamento

ƒ

gli algoritmi si differenziano anche molto in base alla loro classe di

complessità, ma una graduatoria di efficienza non è sempre facile da definirsi perché le loro prestazioni (tempi di ordinamento) possono anche dipendere dal particolare vettore da ordinare. Gli algoritmi di ordinamento classici sono:

ƒ Ordinamento per selezione.

ƒ Ordinamento per inserimento.

ƒ Ordinamento a bolle.

(3)

ordinamento per selezione

ƒ

supponendo di dover ordinare il vettore in senso crescente, si parte selezionando l’elemento più piccolo e ponendolo al primo posto; si procede applicando lo stesso processo al sottovettore non ordinato e così via fino a che quest'ultimo si riduce ad un solo elemento (il maggiore del vettore)

ƒ l'ordinamento per selezione compie n-1 iterazioni

Ordinamento per selezione del vettore di interi 11, 9, 17, 5, 14:

Iterazione 0: 9<11 => selezione: 9 17>9 => niente

5<9 => selezione: 5 14>5 => niente

scambio: 5,9,17,11,14 Iterazione 1: 17>9 => niente

11>9 => niente 14>9 => niente

Iterazione 2: 11<17 => selezione: 11 14>11 => niente

scambio: 5,9,11,17,14

Iterazione 3: 14<17 => selezione: 14

scambio: 5,9,11,14,17 (Vettore ordinato)

(4)

ordinamento per inserimento

ƒ

consiste nell'inserire un elemento alla volta nella posizione che gli spetta in un vettore già ordinato, partendo dal vettore vuoto.

Ad esempio, nel caso del vettore di interi A = 50, 20, 40, 80, 30:

(5)

ordinamento a bolle

per ogni iterazione si confrontano elementi adiacenti e si scambiano i loro valori quando il primo elemento è maggiore del secondo:

alla fine di ogni iterazione, l’elemento maggiore è «gorgogliato» fino alla cima del vettore attuale;

i passi dell'algoritmo sono:

Nell’iterazione 0 si confrontano gli elementi adiacenti

(A[0],A[1]),(A[1],A[2]),(A[2],A[3]),...(A[n-2],A[n-1]) si effettuano n-1 confronti; per ogni coppia (A[i] , A[i+1]) si scambiano i valori se A[i+1] < A[i]; alla fine dell'iterazione, l’elemento maggiore del vettore sarà situato in A[n-1]

All’iterazione 1 si effettuano gli stessi confronti e scambi, terminando con il secondo elemento maggiore in A[n-2]

il processo termina con l'iterazione n-1, nella quale l’elemento più piccolo si trova in A[0]

(6)

ricerca sequenziale

confronta ogni elemento dell’array con una chiave di ricerca; comincia col primo elemento e attraversa i restanti confrontandoli con la chiave finché se ne trova uno con il valore chiave cercato o finché termina il vettore; se l'elemento viene trovato se ne restituisce l’indice, altrimenti si restituisce il valore –1

(7)

Claudio De Stefano - Corso di Fondamenti di Informatica

7

ricerca sequenziale in vettore ordinato

confronta ogni elemento dell’array con una chiave di ricerca; comincia col primo elemento e attraversa i restanti confrontandoli con la chiave finché se ne trova uno con il valore chiave cercato, o se ne trova uno con valore maggiore, o finché termina il vettore; se l'elemento viene trovato se ne restituisce l’indice, altrimenti si restituisce il valore –1

(8)

ricerca binaria

se il vettore è ordinato in base al campo che contiene il valore da cercare allora la ricerca binaria è certamente la migliore; si inizia dal centro del vettore: se l'elemento centrale non contiene la chiave cercata, allora si esamina l'elemento centrale del semivettore destro o di quello sinistro a seconda del fatto che la chiave dell'elemento esaminato sia maggiore o minore di quella cercata; il procedimento và avanti con semivettori sempre dimezzati fino a trovare, se c'è, l'elemento cercato.

int RicercaBin (TipoDato v[], int basso, int alto, Tipodato chiave) {

int centrale;

TipoDato valorecentrale;

while (basso <= alto) {

centrale = (basso + alto)/2; // indice elemento centrale valoreCentrale = v[centrale]; // valore dell’indice centrale if (chiave == valoreCentrale)

return centrale; // trovato valore; restituisce posizione else if (chiave < valoreCentrale)

alto = centrale – 1; // andare al semivettore inferiore else

basso = centrale + 1; // andare al semivettore superiore } // elemento non trovato

return -1;

}

Riferimenti

Documenti correlati

Altrimenti deve essere hgi = G, ma in tal caso G `e un gruppo ciclico di ordine non primo, e in quanto tale ha certamente dei sottogruppi.. (3) Provare che se G ` e un gruppo tale

Un albero binario ` e una struttura di dati in cui c’` e un nodo radice ed ogni nodo ` e collegato a due nodi figli; i nodi in fondo alla gerarchia sono chiamati foglie. Uno heap

Ricerca esaustiva: si scandisce il vettore, confrontando gli elementi con quello da cercare, fino a che.. • si sono confrontati tutti gli

In un palazzo di 100 piani si vuole stabilire qual ` e il piano pi` u alto dal quale ` e possibile lanciare un uovo senza che esso si rompa.. Le uova sono considerate tutte aventi

La tendenza ad ossidarsi e ridursi genera un flusso di elettroni (e quindi di corrente elettrica) dall’anodo verso

CARTELLONE MURALE SULLA COMPRENSIONE DELLE PAROLE CHIAVE NELLA RISOLUZIONE.

Completa le didascalie riferite alla cucina inserendo le funzioni degli oggetti.. Collega ogni elemento del bagno con il

Completa le didascalie riferite alla cucina inserendo i nomi degli oggetti.. Collega ogni elemento del soggiorno con il