Lo strano mondo degli algoritmi di ordinamento Algoritmi
I Tipi Di Algoritmo Di Ordinamento SELECTIONSORT INSERTIONSORT BUBBLESORT QUICKSORT MERGESORT HEAPSORT COUNTINGSORT BUCKETSORT
SELECTIONSORT for ( i = 0 ; i < ( n - 1 ) ; i++ ) { posizione = c; for ( d = i + 1 ; d < n ; d++ ) { if ( array[posizione] > array[d] ) position = d; } if ( posizione != c ) { scambio = array[i]; array[i] = array[position]; array[posizione] = scambio; }
MERGE SORT 1. Se la sequenza da ordinare ha lunghezza 0 oppure 1, è già ordinata. Altrimenti: 2. a sequenza viene divisa in due metà (se la sequenza contiene un numero dispari di elementi, viene divisa in due sottosequenze di cui la prima ha un elemento in più della seconda) 3. Ognuna di queste sottosequenze viene ordinata, applicando ricorsivamente l'algoritm o 4. Le due sottosequenze ordinate vengono fuse. Per fare questo, si estrae ripetutamente il minimo delle due sottosequenze e lo si pone nella sequenza in uscita, che risulterà ordinata
BUBBLESORT for (c = 0 ; c < ( n - 1 ); c++) { for (d = 0 ; d < n - c - 1; d++) { if (array[d] > array[d+1]) { scambio= array[d]; array[d] = array[d+1]; array[d+1] = scambio; }
QUICKSORT L'idea base può esprimersi agevolmente in termini ricorsivi. Ad ogni stadio si effettua un ordinamento parziale di una sequenza di oggetti da ordinare. Assunto un elemento come perno dello stadio, si confrontano con esso gli altri elementi e si posizionano alla sua sinistra i minori e a destra i maggiori, senza tener conto del loro ordine. Dopo questo stadio si ha che il perno è nella sua posizione definitiva. Successivamente si organizzano nuovi stadi simili nei quali si procede all'ordinamento parziale delle sottosequenze di elementi rimasti non ordinati, fino al loro esaurimento.
INSERTIONSORT for (c = 1 ; c <= n - 1; c++) { d = c; while ( d > 0 && array[d] < array[d-1]) { t = array[d]; array[d] = array[d-1]; array[d-1] = t; d--; }
HEAPSORT La struttura di dati heap è un vettore A che puo’: essere interpretato come un albero binario completo B, tranne al più l’ultimo livello. Gli n nodi di B corrispondono alle posizioni 1..n del vettore A, nell’ordine in cui si incontrano i nodi visitando B per livelli crescenti ed esaminando da sinistra a destra i nodi dello stesso livello.
BUCKETSORT L'algoritmo è semplice ed intuitivo: si prepara un array C di dimensione pari a m (cioè al valore massimo che può essere nell'array) con C[i] che rappresenta la frequenza dell'elemento i nell'array di partenza A. Si visita l'array A aumentando l'elemento di C corrispondente. Dopo si visita l'array C in ordine e si scrivono su A, C[i] copie del valore i.