稳定性:stable sort
空间:out-place sort
最优复杂度:O(n+k)
最差复杂度:O(n+k)
伪代码:
Counting_Sort(A,k)
{
n = length[A]
create array B[n] & C[k+1]
for i=0 to k
C[i] = 0
for i=1 to n
C[A[i]]++
for i=1 to k
C[i] = C[i] + C[i-1]
for i=n to 1
B[C[A[i]]] = A[i]
C[A[i]]--
}
Java代码:
import java.util.Arrays;
public class Main {
public static void main(String[] args){
Main m = new Main();
int[] A = {1,2,3,5,4,7,9,1,2,5,3,2,1};
A = m.countingSort(A,10);//数组中最大值小于10
System.out.print(Arrays.toString(A));
//输出:[1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 7, 9]
}
public int[] countingSort(int[] A,int k){
int n = A.length;
int[] B = new int[n];
int[] C = new int[k+1];
for(int i = 0; i <= k; ++i)
C[i] = 0;
for(int i = 0; i < n; ++i)
C[A[i]]++;
for(int i = 1; i <= k; ++i)
C[i] = C[i] + C[i-1];
for(int i = n - 1; i >= 0;--i){
B[C[A[i]]-1] = A[i];
C[A[i]]--;
}
return B;
}
}