Algoritmi di ordinamento in linguaggio C

Documenti analoghi
Corso di Tecniche di Programmazione

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Programmazione I - corso B a.a prof. Viviana Bono

Algoritmi su array / 2

Corso di Fondamenti di Informatica Algoritmi su array / 2

ALGORITMI DI ORDINAMENTO. Naive sort (o selection sort): Consideriamo algoritmi di ordinamento interni (elementi in memoria centrale).

Algoritmo di ordinamento per scambio (a bolle o bubble sort)

Sapendo che il vettore è ordinato, la ricerca può essere ottimizzata Vettore ordinato in senso non decrescente: Vettore ordinato in senso crescente:

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Algoritmi di ordinamento

Ricerca binaria (o dicotomica) di un elemento in un vettore

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

Semplici Algoritmi di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Algoritmi di ordinamento (II parte)

Esercizi di Algoritmi e Strutture Dati

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.

PROGRAMMI LINGUAGGIO C

Esercizi C su array e matrici

Corso di Fondamenti di Programmazione canale E-O. Cos è. un vettore (1) un vettore (2) un vettore (3)

ARRAY. Cosimo Laneve

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

ESERCIZI DI PROGRAMMAZIONE DA TEMI D ESAME - vettori -

ALGORITMI E STRUTTURE DATI

Corso di Informatica

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

La ricerca. Sequenziale Binaria L ordinamento. Selection Sort Appendice: Quick Sort. Sommario FONDAMENTI DI INFORMATICA 1. Ricapitolando un po

Fondamenti di Programmazione

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Linguaggio C. Aggregati di dati

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Strutture dati dinamiche in C (II)

PROGRAMMAZIONE DISCIPLINARE LICEO SCIENTIFICO OPZIONE SCIENZE APPLICATE INFORMATICA CLASSE TERZA

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Algoritmi e Strutture Dati

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Algoritmi di Ordinamento e di Ricerca

Consideriamo un vettore allocato dinamicamente

Laboratorio di Informatica

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

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

Algoritmi di ordinamento. Sequential-sort, Bubble-sort, Quicksort

Primo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Ricerca sequenziale di un elemento in un vettore

Esercitazione 6. Array

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Costrutti iterativi. Utilizzo dei costrutti iterativi

Laboratorio di Informatica

una matrice quadrata, determini se è un Un quadrato magico è una matrice NxN

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Inserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux

Le strutture di controllo in C++

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizi di programmazione in linguaggio C Ordinamento

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Lezione 8 Struct e qsort

LABORATORIO DI FONDAMENTI DI INFORMATICA DIAGRAMMI DI FLUSSO E CODIFICA IN C DEGLI ALGORITMI

10 - Programmare con gli Array

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

Obiettivi di questa esercitazione

Fondamenti di Informatica 2

Progetto e analisi di algoritmi

Esercitazione n 3. Capacità di analisi e di estensione di progetti esistenti Linguaggio Java:

Strutture dati e algoritmi. Sommario

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Albero di Riscorsione

Fondamenti di Informatica Prof. E. Clementini. Dispensa didattica A.A

Algoritmi di ordinamento. Algoritmi. Selection sort semplificato - I. Selection sort semplificato - II

Array e puntatori in C

ORDINAMENTO DI UN VETTORE TRAMITE L ALGORITMO BUBBLE SORT

Laboratorio di Algoritmi e Strutture Dati

Alberi e alberi binari I Un albero è un caso particolare di grafo

Fondamenti di Informatica - 9Cfu Corso di Laurea in Ingegneria Informatica (ord. 270)

UNIVERSITA DEGLI STUDI DI PERUGIA

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Algoritmi e Strutture dati a.a. 2013/2014

Fondamenti di Informatica II 9. Complessità computazionale

Vettori Algoritmi elementari di ordinamento

Edoardo Ardizzone & Riccardo Rizzo

Dispense per i corsi di Informatica generale Corso di laurea in Matematica e. Introduzione agli Algoritmi Corso di laurea in Informatica

Esercizi su programmazione ricorsiva 1. Pericle Perazzo 23 marzo 2012

Progetto di algoritmi per induzione matematica

Ordinamento. Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna

Tutorato Programmazione 1 Modulo 2

Corso di Fondamenti di Informatica II

Bontà dei dati in ingresso

Esercizi di Algoritmi e Strutture Dati

Transcript:

Algoritmi di ordinamento in linguaggio C Ordinamento per inserimento Insertion Sort con funzione ausiliaria int inserisci_valore(int vett[], int dim, int valore) { int i = dim; while (i > 0 && vett[i-1] > valore) { vett[i] = vett[i-1]; i--; vett[i] = valore; return dim+1; / Funzione insertion_sort(...) Ordina un vettore in modo crescente utilizzando la funzione ausiliaria "inserisci_valore". Algoritmo: Insertion Sort Classificazione: algoritmo ingenuo, not in-place Complessita' computazionale: BEST CASE: O(n) AVERAGE CASE: O(n^2) WORST CASE: O(n^2) / int insertion_sort(int dvett[], int svett[], int dim_s) { int dim_d = 0; for(int i = 0; i < dim_s; i++) dim_d = inserisci_valore(dvett, dim_d, svett[i]); return dim_d; int uv[max_dim] = {12, 4, 1, 1, 9; int ov[max_dim]; int dim_ov; dim_ov = insertion_sort(ov, uv, MAX_DIM); printf("vettore ordinato:\n"); stampa_vett(ov, dim_ov); Versione n. 2 del 19/01/2017 Pagina 1

Insertion Sort senza funzione ausiliaria / Funzione insertion_sort(...) Ordina un vettore in modo crescente. Algoritmo: Insertion Sort Classificazione: algoritmo ingenuo, not in-place Complessita' computazionale: BEST CASE: O(n) AVERAGE CASE: O(n^2) WORST CASE: O(n^2) / int insertion_sort(int dvett[], int svett[], int dim_s) { int dim_d = 0; for(int i = 0; i < dim_s; i++) { int j = dim_d; while (j > 0 && dvett[j-1] > svett[i]) { dvett[j] = dvett[j-1]; j--; dvett[j] = svett[i]; dim_d++; return dim_d; int uv[max_dim] = {12, 4, 1, 1, 9; int ov[max_dim]; int dim_ov; dim_ov = insertion_sort(ov, uv, MAX_DIM); printf("vettore ordinato:\n"); stampa_vett(ov, dim_ov); Versione n. 2 del 19/01/2017 Pagina 2

Ordinamento per selezione Selection Sort / Funzione selection_sort(...) Ordina un vettore in modo crescente. Algoritmo: Selection Sort Classificazione: algoritmo ingenuo, in-place Complessita' computazionale: BEST CASE: O(n^2) AVERAGE CASE: O(n^2) WORST CASE: O(n^2) / void selection_sort(int vett[], int dim) { for(int i = 0; i < dim; i++) { int i_min = i; for(int j = i+1; j < dim; j++) { if (vett[j] < vett[i_min]) i_min = j; if (i!= i_min) { int temp = vett[i]; vett[i] = vett[i_min]; vett[i_min] = temp; int v[max_dim] = {-30, 25, 30, 1, -10; selection_sort(v, MAX_DIM); Versione n. 2 del 19/01/2017 Pagina 3

Ordinamento per scambio Bubble Sort / Funzione bubble_sort(...) Ordina un vettore in modo crescente. Algoritmo: Bubble Sort non ottimizzato Classificazione: algoritmo ingenuo, in-place Complessita' computazionale: BEST CASE: O(n^2) AVERAGE CASE: O(n^2) WORST CASE: O(n^2) / void bubble_sort(int vett[], int dim) { for(int i = 0; i < dim-1; i++) { for(int j = 0; j < dim-1; j++) if (vett[j+1] < vett[j]) { int temp = vett[j]; vett[j] = vett[j+1]; vett[j+1] = temp; int v[max_dim] = {-30, 25, 30, 1, -10; bubble_sort(v, MAX_DIM); Versione n. 2 del 19/01/2017 Pagina 4

Bubble Sort con sentinella #include <stdbool.h> / Funzione bubble_sort(...) Ordina un vettore in modo crescente (variante con sentinella). Algoritmo: Bubble Sort Classificazione: algoritmo ingenuo, in-place Complessita' computazionale: BEST CASE: O(n) AVERAGE CASE: O(n^2) WORST CASE: O(n^2) / void bubble_sort(int vett[], int dim) { bool scambi; do { scambi = false; for(int i = 0; i < dim-1; i++) if (vett[i+1] < vett[i]) { int temp = vett[i]; vett[i] = vett[i+1]; vett[i+1] = temp; scambi = true; while (scambi == true); int v[max_dim] = {-30, 25, 30, 1, -10; bubble_sort(v, MAX_DIM); Versione n. 2 del 19/01/2017 Pagina 5

Ordinamento avanzato Quick Sort #define MAX_DIM 10 / Funzione quick_sort(...) Ordina un vettore in modo crescente. Algoritmo: Quick Sort Classificazione: algoritmo avanzato, in-place Complessita' computazionale: BEST CASE: O(nlog(n)) AVERAGE CASE: O(nlog(n)) WORST CASE: O(n^2) / void quick_sort(int vett[], int inf, int sup) { int sx = inf; int dx = sup; int pivot; pivot = vett[(inf + sup) / 2]; while (sx <= dx) { while (vett[sx] < pivot) sx++; while (vett[dx] > pivot) dx--; if (sx < dx) { int temp = vett[sx]; vett[sx] = vett[dx]; vett[dx] = temp; if (sx <= dx) { sx++; dx--; if (inf < dx) quick_sort(vett, inf, dx); if (sx < sup) quick_sort(vett, sx, sup); int v[max_dim] = {-30, 25, 30, 1, -10, 8, -4, 21, 14, -1; quick_sort(v, 0, MAX_DIM-1); Versione n. 2 del 19/01/2017 Pagina 6