La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.

Presentazioni simili


Presentazione sul tema: "Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile."— Transcript della presentazione:

1 Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante un algoritmo si dice computabile Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante un algoritmo si dice computabile.

2 Tutti i tipi di algoritmo

3 Selection Sort: void selsort(int x[ ], int y) { int z=0; for (z=0;z

4 Inserction Sort: void inssort(int a[ ],int n) { int i=0,j=0; for (i=1;i=s;j--) a[j+1]=a[j]; a[s]=x; } Ad ogni iterazione, il vettore è costituito da una parte iniziale ordinata e da la parte rimanente che contiene i valori da ordinare. Per ogni valore ancora da inserire, viene fatta una ricerca binaria nella parte ordinata del vettore e vengono spostati in avanti tutti gli elementi per liberare una posizione Nella posizione liberata viene inserito il valore.

5 Bubble Sort: void bubbsort(int x[ ], int y) { bool scambio=true; int ultimo=y-1,i=0; while (scambio) { scambio=false; for (i=0;i x[i+1]) { int t= x[i]; x[i]=x[i+1]; x[i+1]=t; scambio=true; } ultimo --; } L’algoritmo BUBBLE SORT (ordinamento a bolle) so basa sull’idea di far emergere pian piano gli elementi più piccoli verso l’inizio dell’insieme da ordinare facendo sprofondare gli elementi maggiori verso il fondo: un po’ come le bollicine in un bicchiere di acqua gassata da qui il nome di ordinamento a bolle.

6 Quick Sort: void sort(int a[ ], int inizio, int fine) { int x, y, z; if (fine >inizio) { x = a [inizio]; y= inizio + 1; z= fine+1; while (y < z) { if (a [y] < x) y++; else { r--; swap(a[y], a[z]); } void swap(int & x, int & y) { int temp=x; x=y; y=temp; } Assunto un elemento come perno, si confrontano con esso gli altri elementi e si posizionano alla sua sinistra i minori e a destra i maggiori, senza tener conto del loro ordine. Dopo questo stadio si ha che il perno è nella sua posizione definitiva. Successivamente si procede in modo ricorsivo all'ordinamento parziale delle sottosequenze di elementi rimasti non ordinati, fino al loro esaurimento.

7 Merge Sort: void mersort (int x[ ], int sinistra, int centro, int destra) int i = sinistra, j=centro+ 1,k=0; int y[ ]; while ((i <= centro) && (j <= destra)) { if (x[i] <= x[j]){ y[k]=a[i]; i=i + 1; } else { y[k] = x[j]; j=j + 1; } k=k + 1; } for (k =left ;k

8 void HeapSort(int a[ ], int n){ int i; int lh = n; Costruisci_Heap(a, n); for(i = n-1; i > 0; i--){ temp = a[i]; a[i] = a[0]; a[0] = temp; lh--; Rendi_Heap(a, n, lh, 0); } } void 2_Heap(t_id_tab a[], int n){ int i; for(i = n/2 - 1; i >= 0; i--) 1 Heap(a, n, lh, i); Heap Sort: void 1_Heap(t_id_tab a[], int n, int lh, int i){ int s, d, max; s = 2*i + 1; d = 2*i + 2; if ((s a[i])) max = s; Else max = i; if ((d a[max].chiave)) max = d; if (max != i){ temp = a[i]; a[i] = a[max]; a[max] = temp; 1_Heap(a, n, lh, max);

9 Counting Sort: Per ogni elemento x dell'insieme da ordinare si determinano quanti elementi sono minori di x, si usa questa informazione per assegnare ad x la sua posizione finale nel vettore ordinato. Se, ad esempio, vi sono 8 elementi minori di x, allora x andrà messo nella posizione 9 bisogna fare attenzione al caso in cui vi siano elementi coincidenti. In questo caso infatti non vogliamo assegnare a tutti la stessa posizione. void counting_sort(int* A, int Alen, int* B, int k){ int i; int C[k]; for(i=0; i=0; j--){ B[C[A[j]]-1] = A[j]; C[A[j]] = C[A[j]]-1; }

10 Bucket Sort: Bucket sort suppone che l’input sia generato da un processo casuale che distribuisce gli elementi uniformemente nell’intervallo [0, 1[. Il concetto che sta alla base dell’algoritmo è quello di dividere l’intervallo [0, 1[ in n sottointervalli della stessa dimensione, detti bucket, nei quali vengono distribuiti gli n valori di input. A questo scopo lo pseudocodice che definisce l’algoritmo suppone che l’input sia un array A di n elementi e richiede un array ausiliario B[0...n−1] di liste concatenate (bucket). L’algoritmo procede semplicemente ordinando i valori in ogni bucket tramite un ordinamento di tipo insertion sort. L’output viene infine prodotto concatenando in ordine i vari bucket in un array. #include void bucketSort(int array[ ], int n) { int i, j; int count[n]; for(i=0; i 0; (count[i])--) { array[j++] = i; }}} int main() { int array[] = {1,3,4,6,4,2,9,1,2,9}; int n = 10; int i; for (i = 0;i < n;i++) { printf("%d ", array[i]); } printf("\n"); bucketSort(array, n); for (i = 0;i < n;i++) { printf("%d ", array[i]); } printf("\n"); return 0;


Scaricare ppt "Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile."

Presentazioni simili


Annunci Google