

Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Merge sort è un algoritmo di ordinamento
Tipologia: Appunti
1 / 3
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


Il Merge Sort è un algoritmo di ordinamento basato sulla tecnica divide-et-impera. Funziona dividendo ricorsivamente l'array in due metà, ordinando ciascuna metà e poi fondendole insieme in modo ordinato. Questo documento fornisce un'implementazione del Merge Sort in C# e un'analisi dettagliata della sua complessità.
using System; class MergeSortExample { // Metodo per il Merge Sort public static void MergeSort(int[] array, int sinistra, int destra) { if (sinistra < destra) { // Trova il punto medio int medio = sinistra + (destra - sinistra) / 2; // Ordina la metà sinistra MergeSort(array, sinistra, medio); // Ordina la metà destra MergeSort(array, medio + 1, destra); // Unisci le due metà ordinate Merge(array, sinistra, medio, destra); } } // Metodo per unire due sottoarray ordinati private static void Merge(int[] array, int sinistra, int medio, int destra) { // Dimensione dei due sottoarray int n1 = medio - sinistra + 1; int n2 = destra - medio; // Array temporanei per sinistra e destra int[] sinistraArray = new int[n1];
int[] destraArray = new int[n2]; // Copia i dati nei sottoarray for (int i = 0; i < n1; i++) sinistraArray[i] = array[sinistra + i]; for (int j = 0; j < n2; j++) destraArray[j] = array[medio + 1 + j]; // Indici iniziali per i sottoarray e l'array principale int iSinistra = 0, iDestra = 0, k = sinistra; // Merge dei due sottoarray while (iSinistra < n1 && iDestra < n2) { if (sinistraArray[iSinistra] <= destraArray[iDestra]) { array[k] = sinistraArray[iSinistra]; iSinistra++; } else { array[k] = destraArray[iDestra]; iDestra++; } k++; } // Copia gli elementi rimanenti del sottoarray sinistro (se ce ne sono) while (iSinistra < n1) { array[k] = sinistraArray[iSinistra]; iSinistra++; k++; } // Copia gli elementi rimanenti del sottoarray destro (se ce ne sono) while (iDestra < n2) { array[k] = destraArray[iDestra]; iDestra++; k++; } }