Algoritmi di ordinamento in linguaggio C

Похожие документы
Corso di Tecniche di Programmazione

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

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)

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

PROGRAMMI LINGUAGGIO C

Esercizi C su array e matrici

ARRAY. Cosimo Laneve

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

ESERCIZI DI PROGRAMMAZIONE DA TEMI D ESAME - vettori -

Corso di Informatica

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

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

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)

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

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

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)

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

Lezione 8 Struct e qsort

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

Fondamenti di Informatica 2

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};

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

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Algoritmi e Strutture dati a.a. 2013/2014

Vettori Algoritmi elementari di ordinamento

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

Esercizi di Algoritmi e Strutture Dati

Транскрипт:

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