Time complexity : O((n+b) * logb(k)).
Let there be d digits in input integers.
Radix Sort takes O(d*(n+b)) time where b is the base for representing numbers.
For example, for the decimal system, b is 10.
What is the value of d? If k is the maximum possible value, then d would be O(logb(k)).
So overall time complexity is O((n+b) * logb(k)).
// Radix sort Java implementation
import
java.io.*;
import
java.util.*;
class
Radix {
// A utility function to get maximum value in arr[]
static
int
getMax(
int
arr[],
int
n)
{
int
mx = arr[
0
];
for
(
int
i =
1
; i < n; i++)
if
(arr[i] > mx)
mx = arr[i];
return
mx;
}
// A function to do counting sort of arr[] according to
// the digit represented by exp.
static
void
countSort(
int
arr[],
int
n,
int
exp)
{
int
output[] =
new
int
[n];
// output array
int
i;
int
count[] =
new
int
[
10
];
Arrays.fill(count,
0
);
// Store count of occurrences in count[]
for
(i =
0
; i < n; i++)
count[(arr[i] / exp) %
10
]++;
// Change count[i] so that count[i] now contains
// actual position of this digit in output[]
for
(i =
1
; i <
10
; i++)
count[i] += count[i -
1
];
// Build the output array
for
(i = n -
1
; i >=
0
; i--) {
output[count[(arr[i] / exp) %
10
] -
1
] = arr[i];
count[(arr[i] / exp) %
10
]--;
}
// Copy the output array to arr[], so that arr[] now
// contains sorted numbers according to current
// digit
for
(i =
0
; i < n; i++)
arr[i] = output[i];
}
// The main function to that sorts arr[] of
// size n using Radix Sort
static
void
radixsort(
int
arr[],
int
n)
{
// Find the maximum number to know number of digits
int
m = getMax(arr, n);
// Do counting sort for every digit. Note that
// instead of passing digit number, exp is passed.
// exp is 10^i where i is current digit number
for
(
int
exp =
1
; m / exp >
0
; exp *=
10
)
countSort(arr, n, exp);
}
// A utility function to print an array
static
void
print(
int
arr[],
int
n)
{
for
(
int
i =
0
; i < n; i++)
System.out.print(arr[i] +
" "
);
}
// Main driver method
public
static
void
main(String[] args)
{
int
arr[] = {
170
,
45
,
75
,
90
,
802
,
24
,
2
,
66
};
int
n = arr.length;
// Function Call
radixsort(arr, n);
print(arr, n);
}
}