From ba50a67feac2424cc4e0c6d0f679580987a03adf Mon Sep 17 00:00:00 2001 From: Tushar Kumar <65044832+tushar-kumar@users.noreply.github.com> Date: Thu, 27 Oct 2022 18:15:38 +0530 Subject: [PATCH] Create CountingSort.java Count Sort --- java/CountingSort.java | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 java/CountingSort.java diff --git a/java/CountingSort.java b/java/CountingSort.java new file mode 100644 index 0000000..85d228a --- /dev/null +++ b/java/CountingSort.java @@ -0,0 +1,44 @@ +import java.util.Arrays; + +public class CountingSort { + + public static void main(String[] args) { + int[] arr = { 2, 4, 3, 1 }; + + System.out.println(Arrays.toString(arr)); + int[] sortedArr = countingSort(arr); + System.out.println(Arrays.toString(sortedArr)); + } + private static int[] countingSort(int[] arr) { + + int max = findMax(arr); + if (max == Integer.MIN_VALUE) { + return new int[] {}; + } + int[] counts = new int[max + 1]; + for (int num : arr) { + counts[num]++; + } + for (int idx = 1; idx < counts.length; idx++) { + counts[idx] = counts[idx - 1] + counts[idx]; + } + int[] sortedArray = new int[arr.length]; + int current, sortedIdx; + for (int idx = arr.length - 1; idx >= 0; idx--) { + current = arr[idx]; + counts[current]--; + sortedIdx = counts[current]; + sortedArray[sortedIdx] = current; + } + return sortedArray; + } + private static int findMax(int[] arr) { + int max = Integer.MIN_VALUE; + for (int num : arr) { + if (num > max) { + max = num; + } + } + return max; + } +}