Реализуйте алгоритм сортировки подсчетом в Java
Опубликовано: 2023-01-30Что такое алгоритм сортировки подсчетом?
Сортировка подсчетом — алгоритм сортировки, эффективный для small ranges of integers
. Он работает, подсчитывая количество вхождений каждого значения во входном массиве, а затем используя эту информацию, чтобы поместить каждое значение в правильное положение в выходном массиве.
Временная сложность этого алгоритма составляет O(n+k)
, где n — размер входного массива, а k — диапазон целых чисел.
CrunchifyCountingSortAlgo.java
Вот полная реализация Counting Sort в Java. Просто скопируйте его в предпочтительную IDEA и запустите.
пакет crunchify.com.java.tutorials; импортировать java.util.Arrays; /** * @автор Crunchify.com * Программа: Как реализовать алгоритм сортировки подсчетом в java? * Сортировка подсчетом — это алгоритм сортировки, который сортирует элементы массива. * путем подсчета количества вхождений каждого уникального элемента в массиве. */ открытый класс CrunchifyCountingSortAlgo { public static void main(String[] args) { // Целочисленный массив из 10 элементов int[] crunchifyArray = {9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3}; crunchifyPrint("Исходный массив: " + Arrays.toString(crunchifyArray)); crunchifyPrint("\n"); CrunchifyCountingSortAlgo crunchify = new CrunchifyCountingSortAlgo(); crunchify.crunchifyCountingSortAlgorithm (crunchifyArray); crunchifyPrint("\n"); crunchifyPrint("Результат алгоритма сортировки подсчетом Crunchify: " + Arrays.toString(crunchifyArray)); } private static void crunchifyPrint (String s) { System.out.println(s); } /** * Автор: Апп Шах (Crunchify.com) * * Логика сортировки подсчетом: * Это реализация сортировки подсчетом, алгоритма сортировки, который эффективен для небольших диапазонов целых чисел. * Он работает, подсчитывая количество вхождений каждого значения во входном массиве, * а затем, используя эту информацию, поместить каждое значение в правильное положение в выходном массиве. * Временная сложность этого алгоритма O(n+k), * где n — размер входного массива, а k — диапазон целых чисел. */ public static int[] crunchifyCountingSortAlgorithm(int[] crunchifyArray) { // getAsInt(): если значение присутствует, возвращает значение, в противном случае генерирует исключение NoSuchElementException. int crunchifyMax = Arrays.stream(crunchifyArray).max().getAsInt(); int[] crunchifyCount = новый int[crunchifyMax + 1]; // crunchifyПодсчет вхождений каждого значения во входном массиве for (int i = 0; i < crunchifyArray.length; i++) { crunchifyCount[crunchifyArray[i]]++; crunchifyPrint("Добавление 1 к crunchifyCount[" + crunchifyArray[i] + "], массив crunchifyCount теперь: " + Arrays.toString(crunchifyCount)); } crunchifyPrint("\n"); инт к = 0; for (int i = 0; i <= crunchifyMax; i++) { for (int j = 0; j < crunchifyCount[i]; j++) { crunchifyArray[k++] = i; crunchifyPrint("Добавление " + i + " в позицию " + (k - 1) + " в выходном массиве теперь выходной массив: " + Arrays.toString(crunchifyArray)); } } вернуть crunchifyArray; } }
Просто запустите указанную выше программу как приложение Java в IntelliJ IDEA или Eclipse IDE, и вы получите результат, как показано ниже.
Результат консоли IntelliJ IDEA
Исходный массив: [9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] Добавление 1 к crunchifyCount[9], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[3], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[6], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[6], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[1], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[12], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[32], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[29], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[2], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[9], массив crunchifyCount теперь: [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] Добавление 1 к crunchifyCount[3], массив crunchifyCount теперь: [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] Добавление 1 к позиции 0 в выходном массиве, теперь выходной массив: [1, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] Добавление 2 к позиции 1 в выходном массиве, теперь выходной массив: [1, 2, 6, 6, 1, 12, 32, 29, 2, 9, 3] Добавление 3 к позиции 2 в выходном массиве, теперь выходной массив: [1, 2, 3, 6, 1, 12, 32, 29, 2, 9, 3] Добавление 3 к позиции 3 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 1, 12, 32, 29, 2, 9, 3] Добавление 6 к позиции 4 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 12, 32, 29, 2, 9, 3] Добавление 6 к позиции 5 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 6, 32, 29, 2, 9, 3] Добавление 9 к позиции 6 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 6, 9, 29, 2, 9, 3] Добавление 9 к позиции 7 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 6, 9, 9, 2, 9, 3] Добавление 12 к позиции 8 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 6, 9, 9, 12, 9, 3] Добавление 29 к позиции 9 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 3] Добавление 32 к позиции 10 в выходном массиве, теперь выходной массив: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Результат алгоритма сортировки подсчета Crunchify: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Процесс завершен с кодом выхода 0
Дайте мне знать, если у вас возникнут какие-либо проблемы с запуском Java-программы алгоритма сортировки подсчета.