Implementa l'algoritmo di ordinamento del conteggio in Java
Pubblicato: 2023-01-30
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

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