Implementați algoritmul de sortare de numărare în Java
Publicat: 2023-01-30Ce este algoritmul de sortare de numărare?
Counting sort, un algoritm de sortare care este eficient pentru small ranges of integers
. Funcționează prin numărarea numărului de apariții ale fiecărei valori în matricea de intrare și apoi folosind acele informații pentru a plasa fiecare valoare în poziția corectă în matricea de ieșire.
Complexitatea de timp a acestui algoritm este O(n+k)
, unde n este dimensiunea matricei de intrare și k este intervalul numerelor întregi.
CrunchifyCountingSortAlgo.java
Iată o implementare completă a Counting Sort în Java. Doar copiați-l în IDEA preferată și rulați-l.
pachet crunchify.com.java.tutorials; import java.util.Arrays; /** * @autor Crunchify.com * Program: Cum se implementează algoritmul de sortare de numărare în java? * Counting sort este un algoritm de sortare care sortează elementele unui tablou * prin numărarea numărului de apariții ale fiecărui element unic din matrice. */ clasă publică CrunchifyCountingSortAlgo { public static void main(String[] args) { // Integer Matrice de 10 elemente int[] crunchifyArray = {9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3}; crunchifyPrint("Matrice originală: " + Arrays.toString(crunchifyArray)); crunchifyPrint ("\n"); CrunchifyCountingSortAlgo crunchify = nou CrunchifyCountingSortAlgo(); crunchify.crunchifyCountingSortAlgorithm(crunchifyArray); crunchifyPrint ("\n"); crunchifyPrint("Rezultatul algoritmului de sortare de numărare Crunchify: " + Arrays.toString(crunchifyArray)); } private static void crunchifyPrint(String s) { Printlns.out.system(e); } /** * Autor: App Shah (Crunchify.com) * * Logica de sortare de numărare: * Aceasta este o implementare a sortării de numărare, un algoritm de sortare care este eficient pentru intervale mici de numere întregi. * Funcționează prin numărarea numărului de apariții ale fiecărei valori din matricea de intrare, * și apoi folosind acele informații pentru a plasa fiecare valoare în poziția corectă în matricea de ieșire. * Complexitatea temporală a acestui algoritm este O(n+k), * unde n este dimensiunea matricei de intrare și k este intervalul numerelor întregi. */ public static int[] crunchifyCountingSortAlgorithm(int[] crunchifyArray) { // getAsInt(): Dacă o valoare este prezentă, returnează valoarea, altfel aruncă NoSuchElementException. int crunchifyMax = Arrays.stream(crunchifyArray).max().getAsInt(); int[] crunchifyCount = new int[crunchifyMax + 1]; // crunchifyCount aparițiile fiecărei valori din tabloul de intrare pentru (int i = 0; i < crunchifyArray.length; i++) { crunchifyCount[crunchifyArray[i]]++; crunchifyPrint("Se adaugă 1 la crunchifyCount[" + crunchifyArray[i] + "], matricea crunchifyCount este acum: " + Arrays.toString(crunchifyCount)); } crunchifyPrint ("\n"); int k = 0; pentru (int i = 0; i <= crunchifyMax; i++) { pentru (int j = 0; j < crunchifyCount[i]; j++) { crunchifyArray[k++] = i; crunchifyPrint("Adăugarea " + i + " în poziţia " + (k - 1) + " în tabloul de ieșire, matricea de ieșire este acum: " + Arrays.toString(crunchifyArray)); } } returnează crunchifyArray; } }
Doar rulați programul de mai sus ca aplicație Java în IntelliJ IDEA sau Eclipse IDE și veți avea ca rezultat ca mai jos.
Rezultatul Consolei IntelliJ IDEA
Matrice originală: [9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] Adăugând 1 la crunchifyCount[9], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[3], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[6], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[6], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[1], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[12], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[32], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[29], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[2], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[9], matricea crunchifyCount este acum: [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] Adăugând 1 la crunchifyCount[3], matricea crunchifyCount este acum: [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] Adăugând 1 la poziția 0 în matricea de ieșire, matricea de ieșire este acum: [1, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] Adăugând 2 la poziția 1 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 6, 6, 1, 12, 32, 29, 2, 9, 3] Adăugând 3 la poziția 2 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 6, 1, 12, 32, 29, 2, 9, 3] Adăugând 3 la poziția 3 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 1, 12, 32, 29, 2, 9, 3] Adăugând 6 la poziția 4 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 12, 32, 29, 2, 9, 3] Adăugând 6 la poziția 5 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 6, 32, 29, 2, 9, 3] Adăugând 9 la poziția 6 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 6, 9, 29, 2, 9, 3] Adăugând 9 la poziția 7 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 6, 9, 9, 2, 9, 3] Adăugând 12 la poziția 8 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 6, 9, 9, 12, 9, 3] Adăugând 29 la poziția 9 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 3] Adăugând 32 la poziția 10 în matricea de ieșire, matricea de ieșire este acum: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Rezultatul algoritmului de sortare de numărare Crunchify: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Procesul s-a încheiat cu codul de ieșire 0
Anunțați-mă dacă vă confruntați cu vreo problemă de rulare deasupra programului Java Algoritm de sortare de numărare.