计数排序
计数排序是一种基于非比较的排序方法,其基本思想是桶排序的思想。初始化n个桶,n的值为待拍序列中最大值与最小值的差值加1。然后依次将序列中每个数与最小值做差,放入对应位置的桶中,最后依次将桶中的数倒出。计数排序每一次向桶中放数都是确定该数最终的位置,但是计数排数缺点就是牺牲空间。
1.下图展示了计数排序的过程:
初始序列为:3,6,2,4,1,5
2.Java代码实现:
public int[] countingSort(int[] A, int n) {
int[] b = new int[n];
int min = A[0],max = A[0];
for(int i = 0; i < n; i++){
if(min > A[i]) min = A[i];
if(max < A[i]) max = A[i];
}
System.out.println(min +" "+max);
int k = max - min + 1;
int[] c = new int[k];
for(int i = 0; i < n;i++){
c[A[i] - min] += 1;
}
for(int i = 1; i < c.length; i++){
c[i] = c[i] + c[i-1];
}
for(int i = n - 1; i >= 0; i--){
b[--c[A[i]-min]] = A[i];
}
return b;
}