Advertisement
Aldin-SXR

RadixSort.java

Apr 24th, 2020
413
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.34 KB | None | 0 0
  1. package ds.radix.sort;
  2.  
  3. public class RadixSort {
  4.  
  5.     /* Radix sort algorithm (public invocation) */
  6.     public static void sort(int[] elements) {
  7.         int max = getMax(elements);                         // 1
  8.        
  9.         for (int exp = 1; max / exp > 0; exp *= 10) {       // 2
  10.             sort(elements, exp);                            // 3
  11.         }
  12.     }
  13.  
  14.     /* Digit-wise radix sort logic */
  15.     private static void sort(int[] elements, int exp) {
  16.         int[] aux = new int[elements.length];                   // 1
  17.         int[] frequency = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};       // 2
  18.        
  19.         for (int i = 0; i < elements.length; i++) {             // 3
  20.             int digit = (elements[i] / exp) % 10;               // 3
  21.             frequency[digit]++;                                 // 3
  22.         }
  23.        
  24.         for (int i = 1; i < 10; i++) {                          // 4
  25.             frequency[i] += frequency[i - 1];                   // 4
  26.         }
  27.        
  28.         for (int i = elements.length - 1; i >= 0; i--) {        // 5
  29.             int digit = (elements[i] / exp) % 10;               // 5
  30.             aux[frequency[digit] - 1] = elements[i];            // 5
  31.             frequency[digit]--;                                 // 5
  32.         }
  33.        
  34.         for (int i= 0; i < elements.length; i++) {              // 6
  35.             elements[i] = aux[i];                               // 6
  36.         }
  37.     }
  38.    
  39.         /* Find the maximum element in the array */
  40.         private static int getMax(int[] elements) {
  41.             int max = elements[0];                          // 1
  42.             for (int i = 1; i < elements.length; i++) {     // 2
  43.                 if (elements[i] > max) {                    // 3
  44.                     max = elements[i];                      // 3
  45.                 }
  46.             }
  47.             return max;                                     // 4
  48.         }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement