ALGORITMI Un algoritmo un insieme di istruzioni ordinate

  • Slides: 13
Download presentation
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili

ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili

Quick sort • Ordina i dati suddividendo il problema in problemi di complessità minore

Quick sort • Ordina i dati suddividendo il problema in problemi di complessità minore

Esempio • • • • #define MAX 5 typedef float vector [MAX]; vector v;

Esempio • • • • #define MAX 5 typedef float vector [MAX]; vector v; int size; void quicksort(int low, int hi); void leggi(); void scrivi(); main() { printf ("Ordinamento di un vettore"); leggi(); quicksort (0, size-1); scrivi(); } void quicksort(int low, int hi) { int i, j; • • • • float pivotelem, temp; if ( low < hi ) { i = low; j = hi; pivotelem = v[hi]; do { while ((i < j) && (v[i] <= pivotelem)) i = i + 1; while ((j > i) && (v[j] >= pivotelem)) j = j - 1; if (i < j) { temp = v[i]; v[i] = v[j]; v[j] = temp; } } while (i < j); if ((i != hi) && (v[i] != v [hi])) { temp = v[i]; v[i] = v[hi]; v[hi] = temp; } if (low < i - 1) quicksort (low, i - 1); if (i + 1< hi ) quicksort (i + 1, hi); } }

Heap sort • Questo algoritmo inserisce a destra dell’ elenco il valore più semplice

Heap sort • Questo algoritmo inserisce a destra dell’ elenco il valore più semplice

Esempio • • • • for (i=0; i < 20; i++) lung [i] =0;

Esempio • • • • for (i=0; i < 20; i++) lung [i] =0; while (printf("n OPERA SU HEAP? 1/0n"), scanf("%d", &choice), (choice) { do { printf ("n Operare: malloc/1 free/2 e indice (0/19) nelementi n"); for (i=0; i < 20; i++) printf ("%d ", lung [i]); printf("n"); scanf("%d %d", &choice, &i); } while ( ((choice !=1) && (choice!=2)) || ((i < 0) || (i > 19))); switch (choice) { Case 1: do • { printf ("n Quanti byte da allocaren"); • scanf ("%d", &nbyte); • } • while ( nbyte <= 0); • p[i] = MIAmalloc(nbyte); • stampa (p[i]); • lung[i]=nbyte; • stampaheap (); • break; Case 2: printf (" Si libera l’elemento %d lungo %d n", i, • lung[i]); • MIAfree(p[i]); lung [i]=0; • stampaheap (); • }} • stampaheap ();

Merge sort • Unisce due elenchi già ordinati ai dati per ordinarli in una

Merge sort • Unisce due elenchi già ordinati ai dati per ordinarli in una lista sola

Esempio • • • #define MAX 5 typedef float vector [MAX]; vector v; int

Esempio • • • #define MAX 5 typedef float vector [MAX]; vector v; int size; void merge (iniz 1, iniz 2, fine); void mergesort(i, j) int i, j; { int m; if ( i < j ) { m = (j + i) / 2; mergesort (i , m); mergesort (m +1, j); • • • merge (i, m + 1, j); } } void leggi(); void scrivi(); main() { printf ("Ordinamento di un vettore: MERGESORT "); leggi(); mergesort (0, size-1); scrivi(); }

Counting Sort • Ordina i dati paragonabili uno alla volta e l confronta con

Counting Sort • Ordina i dati paragonabili uno alla volta e l confronta con un valore numerico

Bubble sort • Confronta i dati e mette quello di valore minore a sinistra

Bubble sort • Confronta i dati e mette quello di valore minore a sinistra dell’ elenco

Esempio • • • • #define MAX 5 #define true 1 #define false 0

Esempio • • • • #define MAX 5 #define true 1 #define false 0 typedef float vector [MAX]; vector v; int size; void bubblesort(int iniz, int fine); void leggi(); void scrivi(); main() { printf ("Ordinamento di un vettore"); leggi(); bubblesort(0, size-1); scrivi(); } • • • • void bubblesort(int iniz, int fine) { int NONSCAMBIO, I; float temp; do { NONSCAMBIO = true; for (I = iniz; I < fine; I = I + 1) { if (v[I] > v[I+1]) { NONSCAMBIO = false; temp = v[I]; v[I] = v[I+1]; v[I+1] = temp; } } } while (! NONSCAMBIO); }

Selection sort • Serve ad ordinare pochi elementi, ordina i dati assegnando un minore

Selection sort • Serve ad ordinare pochi elementi, ordina i dati assegnando un minore tra quelli che rimangono

Insertion sort • Ordina i maggiori a destra ed i minori a sinistra

Insertion sort • Ordina i maggiori a destra ed i minori a sinistra