算法原理:
基数排序是基于非比较的的整数排序算法。它采用分治的思想进行排序,与快速排序和归并排序在数组级别的分治思想不同,基数排序基于元素级别的分治。即从元素的最低位个位开始排序,然后依次排十位,百位等。下图展示了基数排序的排序过程。
算法伪代码:
算法伪代码来自算法导论基数排序部分:
RADIX-SORT(A, d)
for i=1 to d
do use a stable sort to sort array A to digit i
算法性能分析:
时间复杂度分析:O(k*n) k为最大的位数,n代表需要排序的个数
空间复杂度分析:O(k*n)
稳定性:稳定
Java版本代码实现:
private void radixsort(int[] A, int d)
{
for(int i=0;i<d;i++)
countingsort(A, i);
}
private void countingsort(int[] A, int power)
{
int[] B = new int[A.length];
int[] C = new int[10];
for(int i=0;i<A.length;i++)
C[getDigit(A[i], power)] = C[getDigit(A[i], power)] + 1;
for(int i=1;i<10;i++)
C[i] = C[i] + C[i-1];
for(int i=A.length-1;i>=0;i--)
{
B[C[getDigit(A[i], power)]-1] = A[i];
C[getDigit(A[i], power)]--;
}
for(int i=0;i<A.length;i++)
A[i] = B[i];
}
private int getDigit(int value, int power)
{
return (int)(value/Math.pow(10, power)) % 10;
}