diff --git a/Java/sorting/RadixSort.java b/Java/sorting/RadixSort.java new file mode 100644 index 0000000..6cb2aac --- /dev/null +++ b/Java/sorting/RadixSort.java @@ -0,0 +1,46 @@ +public class RadixSort { + + public static void radixSort(int[] arr) { + int max = getMax(arr); + for (int exp = 1; max / exp > 0; exp *= 10) { + countSort(arr, exp); + } + } + + private static int getMax(int[] arr) { + int max = arr[0]; + for (int i = 1; i < arr.length; i++) + if (arr[i] > max) + max = arr[i]; + return max; + } + + private static void countSort(int[] arr, int exp) { + int n = arr.length; + int[] output = new int[n]; + int[] count = new int[10]; + + for (int i = 0; i < n; i++) + count[(arr[i] / exp) % 10]++; + + for (int i = 1; i < 10; i++) + count[i] += count[i - 1]; + + for (int i = n - 1; i >= 0; i--) { + int index = (arr[i] / exp) % 10; + output[count[index] - 1] = arr[i]; + count[index]--; + } + + for (int i = 0; i < n; i++) + arr[i] = output[i]; + } + + public static void main(String[] args) { + int[] arr = {170, 45, 75, 90, 802, 24, 2, 66}; + radixSort(arr); + System.out.println("Sorted array:"); + for (int num : arr) + System.out.print(num + " "); + } +}