Implementa l'algoritmo di ordinamento del conteggio in Java

Pubblicato: 2023-01-30
Implementa l'algoritmo di ordinamento del conteggio in Java

Che cos'è l'algoritmo di ordinamento del conteggio?

Counting sort, un algoritmo di ordinamento efficiente per small ranges of integers . Funziona contando il numero di occorrenze di ciascun valore nell'array di input e quindi utilizzando tali informazioni per posizionare ciascun valore nella posizione corretta nell'array di output.

La complessità temporale di questo algoritmo è O(n+k) , dove n è la dimensione dell'array di input e k è l'intervallo degli interi.

CrunchifyCountingSortAlgo.java

Ecco un'implementazione completa di Counting Sort in Java. Basta copiarlo nella tua IDEA preferita ed eseguirlo.

 pacchetto crunchify.com.java.tutorials;

import java.util.Arrays;

/**
 * @autore Crunchify.com
 * Programma: come implementare l'algoritmo di ordinamento del conteggio in Java?
 * Counting sort è un algoritmo di ordinamento che ordina gli elementi di un array 
 * contando il numero di occorrenze di ciascun elemento univoco nell'array.
 */

classe pubblica CrunchifyCountingSortAlgo {

    public static void main(String[] args) {

        // Integer Array di 10 elementi
        int[] crunchifyArray = {9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3};

        crunchifyPrint("Array originale: " + Arrays.toString(crunchifyArray));
        crunchifyPrint ("\n");

        CrunchifyCountingSortAlgo crunchify = new CrunchifyCountingSortAlgo();
        crunchify.crunchifyCountingSortAlgorithm(crunchifyArray);

        crunchifyPrint ("\n");
        crunchifyPrint("Risultato dell'algoritmo di ordinamento del conteggio Crunchify: " + Arrays.toString(crunchifyArray));
    }

    private static void crunchifyPrint(String s) {

        System.out.println(s);
    }


    /**
     * Autore: App Shah (Crunchify.com)
     *
     * Logica di ordinamento del conteggio:
     * Si tratta di un'implementazione di counting sort, un algoritmo di ordinamento efficiente per piccoli intervalli di numeri interi.
     * Funziona contando il numero di occorrenze di ciascun valore nell'array di input,
     * e quindi utilizzando tali informazioni per posizionare ciascun valore nella posizione corretta nell'array di output.
     * La complessità temporale di questo algoritmo è O(n+k),
     * dove n è la dimensione dell'array di input e k è l'intervallo degli interi.
     */


    public static int[] crunchifyCountingSortAlgorithm(int[] crunchifyArray) {

        // getAsInt(): se è presente un valore, restituisce il valore, altrimenti genera NoSuchElementException.
        int crunchifyMax = Arrays.stream(crunchifyArray).max().getAsInt();
        int[] crunchifyCount = new int[crunchifyMax + 1];

        // crunchifyConta le occorrenze di ciascun valore nell'array di input
        for (int i = 0; i < crunchifyArray.length; i++) {
            crunchifyCount[crunchifyArray[i]]++;
            crunchifyPrint("Aggiungo 1 a crunchifyCount[" + crunchifyArray[i] 
                    + "], l'array crunchifyCount ora è: " + Arrays.toString(crunchifyCount));
        }

        crunchifyPrint ("\n");

        intero k = 0;
        for (int i = 0; i <= crunchifyMax; i++) {
            for (int j = 0; j < crunchifyCount[i]; j++) {
                crunchifyArray[k++] = i;
                crunchifyPrint("Aggiungo " + i + " alla posizione " + (k - 1) 
                        + " nell'array di output, l'array di output è ora: " + Arrays.toString(crunchifyArray));
            }
        }

        return crunchifyArray;
    }

}

Basta eseguire il programma sopra come applicazione Java in IntelliJ IDEA o Eclipse IDE e otterrai come di seguito.

Risultato console IntelliJ IDEA

 Array originale: [9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3]


Aggiungendo 1 a crunchifyCount[9], l'array crunchifyCount è ora: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aggiungendo 1 a crunchifyCount[3], l'array crunchifyCount è ora: [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aggiungendo 1 a crunchifyCount[6], l'array crunchifyCount è ora: [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aggiungendo 1 a crunchifyCount[6], l'array crunchifyCount è ora: [0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aggiungendo 1 a crunchifyCount[1], l'array crunchifyCount è ora: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aggiungendo 1 a crunchifyCount[12], l'array crunchifyCount è ora: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aggiungendo 1 a crunchifyCount[32], l'array crunchifyCount è ora: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
Aggiungendo 1 a crunchifyCount[29], l'array crunchifyCount è ora: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
Aggiungendo 1 a crunchifyCount[2], l'array crunchifyCount è ora: [0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
Aggiungendo 1 a crunchifyCount[9], l'array crunchifyCount è ora: [0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
Aggiungendo 1 a crunchifyCount[3], l'array crunchifyCount è ora: [0, 1, 1, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]


Aggiungendo 1 alla posizione 0 nell'array di output, l'array di output è ora: [1, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3]
Aggiungendo 2 alla posizione 1 nell'array di output, l'array di output è ora: [1, 2, 6, 6, 1, 12, 32, 29, 2, 9, 3]
Aggiungendo 3 alla posizione 2 nell'array di output, l'array di output è ora: [1, 2, 3, 6, 1, 12, 32, 29, 2, 9, 3]
Aggiungendo 3 alla posizione 3 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 1, 12, 32, 29, 2, 9, 3]
Aggiungendo 6 alla posizione 4 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 12, 32, 29, 2, 9, 3]
Aggiungendo 6 alla posizione 5 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 6, 32, 29, 2, 9, 3]
Aggiungendo 9 alla posizione 6 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 6, 9, 29, 2, 9, 3]
Aggiungendo 9 alla posizione 7 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 6, 9, 9, 2, 9, 3]
Aggiungendo 12 alla posizione 8 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 6, 9, 9, 12, 9, 3]
Aggiungendo 29 alla posizione 9 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 3]
Aggiungendo 32 alla posizione 10 nell'array di output, l'array di output è ora: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32]


Risultato dell'algoritmo di ordinamento del conteggio di Crunchify: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32]

Processo terminato con codice di uscita 0 
Implementa l'algoritmo di ordinamento del conteggio in Java - Risultato IntelliJ IDEA

Fammi sapere se riscontri problemi con l'esecuzione del programma Java Counting Sort Algorithm.