



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
E illustra con codice sorgente i due algoritmi di ordinamento merge sort e insertion sort. L'insertion sort è un semplice algoritmo che costruisce gradualmente una lista ordinata, mentre merge sort è un algoritmo ricorsivo che utilizza il concetto di 'dividi e conquista'. La complessità di esistenza, migliore e peggiore per entrambi gli algoritmi è fornita.
Tipologia: Schemi e mappe concettuali
1 / 6
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




L'Insertion Sort è un semplice algoritmo di ordinamento che costruisce gradualmente una lista ordinata, inserendo uno alla volta gli elementi non ancora ordinati nella posizione corretta.
Ecco come funziona l'algoritmo di Insertion Sort:
public class InsertionSort {
public static void insertionSort(int[] array) { if (array == null || array.length <= 1) { return; // Caso base: già ordinato o vuoto }
int n = array.length;
for (int i = 1; i < n; i++) { // ciclo for che itera a int key = array[i]; // Elemento corrente seleziona int j = i - 1; // Indice dell'elemento precedente
// Sposta gli elementi più grandi a destra while (j >= 0 && array[j] > key) { //ciclo while c array[j + 1] = array[j]; //spsota l'elemnto da j--; }
// Inserisci l'elemento selezionato nella posizio array[j + 1] = key; } } }
public class Main { public static void main(String[] args) { int[] array = {5, 2, 8, 12, 3}; InsertionSort.insertionSort(array); for (int num : array) { System.out.print(num + " "); } // Output: 2 3 5 8 12 } }
La complessità dell'algoritmo di Insertion Sort dipende dal numero di elementi da ordinare. Ecco la complessità nel caso peggiore, migliore:
Nel caso peggiore, quando l'array è ordinato al contrario la complessità è O(n^2), dove 'n' è il numero di elementi da ordinare. Nel caso migliore, quando l'array è già completamente ordinato la complessità è O(n), che è lineare.
array ausiliario per conservare temporaneamente i valori mentre si effettua la fusione.
public class MergeSort { public static void sort(int[] arr) { int n = arr.length; if (arr == null || n<= 1) { return; // Caso base: già ordinato o vuoto } int mid = n / 2; int[] left = new int[mid]; int[] right = new int[n - mid]; for (int i = 0; i < mid; i++) { left[i] = arr[i]; } for (int i = mid; i < n; i++) { right[i - mid] = arr[i]; } sort(left); sort(right); merge(left, right, arr); }
private static void merge(int[] left, int[] right, int[] a int nL = left.length; int nR = right.length; int i = 0, j = 0, k = 0; while (i < nL && j < nR) { if (left[i] <= right[j]) { arr[k++] = left[i++]; } else { arr[k++] = right[j++]; } } while (i < nL) { arr[k++] = left[i++];
while (j < nR) { arr[k++] = right[j++]; } } }
public class Main { public static void main(String[] args) {
int[] array = {5, 2, 8, 12, 3}; MergeSort.sort(array); for (int num : array) { System.out.print(num + " "); } } }
La complessità del Merge Sort è O(n log n).
La complessità nel caso peggiore, nel caso medio e nel caso migliore del Merge Sort è sempre O(n log n). Questo perché l'algoritmo divide ricorsivamente l'array in due parti approssimativamente uguali e poi fonde le parti ordinate. Poiché l'operazione di divisione richiede log n passaggi (dove 'n' è il numero di elementi), e ogni passaggio richiede un tempo lineare per la fusione, l'algoritmo ha una complessità totale di O(n log n).
Il Merge Sort è generalmente considerato migliore rispetto al Selection Sort e al Bubble Sort per diversi motivi: