×

Radix Sort in Java

Radix Sort in Java

Radix sort in Java uses the digits of the numbers given in the sorted array to sort the numbers. The radix sort uses the place value of digits to do the sorting moving from the LSB (Least Significant Digit) to MSB (Most Significant Digit) of the numbers. By using the counting sort, the quick sort place elements to their appropriate position. Unlike other sorting algorithms, this sorting algorithm never compares numbers to do the sorting. Hence, radix sort is a non-comparative sorting algorithm.  

Algorithm and Pseudo Code

 // arr -> is the input array to sort
//dig number of digits each integer has
radixSort(arr, dig)
// Uses counting sort for dig number of passes
// Each element in the array has dig number of digits
// consider digits of every number from left to right to do the sorting
for i = 1 to dig do
               int freq[] = {0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
               int res[] = new int[arr.length];
               // Store the frequency of "digits as keys" in freq[]
               // digits as keys - the number that is present at the place i
               for j = 0 to sizeOfArr do
                increase freq[key of (arr[j]) in the pass i] by 1
               end for
               for l = 1 to 10 do
                freq[l] = freq[l] + freq[l - 1]
               end for
               // create the resultant array by checking
               // the position of arr[i] from freq[k]
               for i = size - 1 down to 0 do
                res[ freq[key of(arr[i])] ] = arr[j]
                reduce freq[key of(arr[i])] by 1
               end for
               // Now the input array arr[] contains the numbers sorted in
               // accordance to current digit place
               for j = 0 to size do
                 arr[j] = res[j]
               end for
end for
end radixSort 

Java Program
The following code implements radix sort using the pseudo-code defined above.

FileName: RadixSortExample.java

 // import statements
import java.util.*;
import java.io.*;
public class RadixSortExample
{
// A utility method to get maximum value element in arr[]
static int findMax(int a[], int size)
{
               int max = a[0];
               for (int j = 1; j < size; j++)
               {
                               if (a[j] > max)
                               {
                                              max = a[j];
                               }
               }
               return max;
}
// A method to do counting sort of a[] according to
// the digit represented by exp.
static void countSort(int a[], int size, int exponent)
{
               int outcome[] = new int[size]; // output array
               int countFreq[] = new int[10];
               // initializing the array list elements by 0
               Arrays.fill(countFreq, 0);
               // Keep counting of occurrences in countFreq[]
               for (int j = 0; j < size; j += 1)
               {
                   int index = (a[j] / exponent) % 10;
                               countFreq[index] = countFreq[index] + 1;
               }
               // Update countFreq[j] so that countFreq[j] now stores
               // the appropriate position of the digits in the outcome array
               for (int j = 1; j < 10; j++)
               {
                               countFreq[j] = countFreq[j] + countFreq[j - 1];
               }
               // Compose the outcome array
               for (int j = size - 1; j >= 0; j -= 1)
               {
                   int index = (a[j] / exponent) % 10;
                               outcome[countFreq[index] - 1] = a[j];
                               countFreq[index] = countFreq[index] - 1;
               }
               // Copy the output array to a[], so that a[] now
               // contains sorted numbers according to curent digit
               for (int j = 0; j < size; j++)
               {
                               a[j] = outcome[j];
               }
}
// The method that is responsible for doing the sorting for array a of size s
// using radix Sort
static void radixSort(int a[], int s)
{
               // to find the maximum number of digits
               // we must know the maximum number
               int maxEle = findMax(a, s);
               // For each and every digit of the number perform counting sort
               // Note that numbers or digits of numbers are not passed, exponent is passed.
               // It is the exponent that determines which
               for (int exponent = 1; maxEle / exponent > 0; exponent *= 10)
               {
                               countSort(a, s, exponent);
               }
}
// main method
public static void main(String argvs[])
{
    // given input array
    int a[] = {326, 453, 608, 835, 751, 435, 704, 690};
    // calculating size of the array
    int size = a.length;
    System.out.println("The array before sorting is: ");
    for(int i = 0; i < size; i++)
    {
       System.out.print(a[i] + " ");
    }
    System.out.println("\n");
    // invoking the method radixSort()
    radixSort(a, size);
    System.out.println("The array after sorting is: ");
    // displaying the sorted array
    for(int i = 0; i < size; i++)
    {
        System.out.print(a[i] + " ");
    }
}
} 

Output:

 The array before sorting is:
326 453 608 835 751 435 704 690
The array after sorting is:
326 435 453 608 690 704 751 835 

Explanation: The above program first does the sorting of digits present at the unit place. Then, it performs the sorting again, using counting sort, on the digits present at tens place that is already sorted with the digits present at the unit place. Finally, the program takes the digits present at the hundredth place and does the sorting using counting sort. For simplicity, we have taken all numbers having the same number of digits. The following diagram illustrates the same.

Radix Sort in Java

If elements are having a different number of digits, 0 is padded to the element that has a smaller number of digits. For example, if we take 9, 343, 34 then, 9 is considered as 009, 343 as 343, and 9 as 009. Thus, we end up having an equal number of digits for each number.

Analysis of the Radix Sort

Radix sort is a stable sorting algorithm. It uses the concept of bucketing for placing numbers having the same LSB or MSB in the same bucket. Then counting sort decided which number to put first and which one to put later in the bucket. For a large number of inputs, it is found that the radix sort is better than quick sort. However, it is not completely true. If the number of digits increases, then quick sort takes precedence over radix sort.

Time Complexity

Let dig be the number of digits of the largest value element. Let, n be the number of elements in the given input array. Then, the total time complexity of radix sort is O(dig(n + b)), where b is the base used to represent the numbers. In our example, numbers are represented in base 10.

Space Complexity

Space complexity of the radix sort is O(n + k), where n is the total number of elements present in the array, and k is the number of digits present in the maximum element.

Conclusion

Even though the radix sorting algorithm works well than comparison algorithm, for larger numbers the radix sort operation is slow. It should be used where it is required to bucket the elements of almost same category. For lexicographical sorting of strings, the radix sort algorithm can also be used.


Related Topics

Java String isEmpty() method

Java String isEmpty() method checks whether current String is empty or not. Syntax: public boolean isEmpty() Returns It returns true, if length of String is 0 otherwise false. Java String isEmpty() method example 1    ...

1 minute read.

Java Boolean compareTo() method

The compareTo() method of Java Boolean class compares the Boolean argument with the Boolean instance and returns integer value, zero, or negative 1, or positive 1 based on the result...

2 minutes read.

Zygodromes in Java

Zygodrome is a positive number created by the same digits running non-trivially. A number is called a zygodrome if identical digits constantly occur together (in pairs). The Greek word "zyg"...

4 minutes read.

Java IO

It is a part of java libraries but is often known as I/O streams, file I/O, and file handling. The Java I/O concept satisfies the need for input processing and...

4 minutes read.

Pattern Programs in Java

Pattern Programs in Java In Java, pattern programs are the most important from the perspective of interviews. The pattern programs improve thinking and coding skills. It also helps us to develop a...

27 minutes read.

Java Program to Sort an Array of 0's, 1's, and 2’s | Dutch National Flag Problem in Java

The famed Dutch computer programmer Edsger Dijkstra's Dutch Nation Flag (DNF) challenge ranks among the most well-known programming challenges. The Dutch tricolor flag, comprising red, white, and blue, is the...

3 minutes read.

How to initialize string array in Java

In this tutorial, we will learn how the string array is initialized in java. The initialization of string array in the java by using the NEW (it creates the object for...

3 minutes read.

How to declare string array in Java

Introduction Array is a data structure with a fixed size, which allows us to store elements of similar type. Data of primitive types like int, char, float, string, etc. can be...

2 minutes read.

How to take Array Input in Java

In this tutorial, we will learn about how to take array input in Java. So, before taking inputs let us know what an array is first. Array: An array is a collection...

10 minutes read.

Java Numbers

We use primitive data types like byte, int, long, double, etc to work with the numbers, When we need objects, we use wrapper class like Integer, Double, Long, Byte, etc....

2 minutes read.

Java Integer reverseByte() method

The reverseByte() method of Java Integer class returns the value obtained by reversing the order of the bytes in the 2’s complement binary representation. Syntax public static int reverseByte (int i) Parameters The parameter...

1 minute read.

Java Buffer Reader

When a variable cannot change its value during run time is called a Static way of programming. In this programming, a variable is directly assigned to a value. Program: Import java.io.*; class  A {  ...

4 minutes read.

Sorting Algorithms in Java

Sorting Algorithms in Java Sorting is the technique that puts the elements of an array or list either in descending or ascending order. For example, take an array A, whose elements...

3 minutes read.

Compile time vs Runtime in java

Introduction: This article will discuss compile time vs. runtime in java. Compile time and runtime are two programming terms utilized in software improvement. Compile time is when the source code is...

3 minutes read.

ArrayDeque in Java

ArrayDeque The ArrayDeque is one of the essential concepts in java to implement the deque interface. It will allow us to apply a resizable array to implement the Deque interface. This...

8 minutes read.

Object class in Java

In Java, a class is a file containing the Java byte code. It can essentially specifically be executed on the JVM (Java Virtual Machine), fairly significant. The JVM mostly generally...

6 minutes read.

How to Convert Hexadecimal to Decimal in Java

How to Convert Hexadecimal to Decimal in Java There are two methods to convert Hexadecimal to Decimal: Using parseInt() method Using user-defined logic Using Integer.parseInt() method It is a static method of...

2 minutes read.

Statements in java

What is Statement in java: A statement in java is an instruction that explains what will happen based on the condition. Types of java statements: There are different statements in java Expression statementDeclaration statementControl...

2 minutes read.

Java Integer floatValue() method

The floatValue() method of Integer class returns a float value for this Integer after a widening primitive conversion. Syntax public float floatValue() Parameters NA Specified by This method is specified by floatValue in class Number Return Value This...

1 minute read.

Bad Operand types for Binary Operator Java

We will discuss how to handle issues in bad operand types for binary operator &, bad operand types for binary operator &&, bad operand types for binary operator ==, and...

4 minutes read.