<pre name="code" class="java">public class CountSort {
public static final int MIN=-10000;
public static void main(String[] args) {
new CountSort().start();
}
private void start() {
int[] a = {15,24,13,98,47,65,39,71};
int[] b=new int[a.length];
int max = getMaxmium(a);
countsort(a,b,max);
System.out.print("排序后数据:");
for(int i:b) {
System.out.print(i+" ");
}
}
private void countsort(int[] a,int[] b,int k) {
int[] c=new int[k+1];
for(int i=0;i<=k;i++) {
c[i] = 0;
}
for(int j=0;j<a.length;j++) {
c[a[j]]++;
}
for(int i=1;i<=k;i++) {
c[i]=c[i]+c[i-1];
}
for(int j=a.length-1;j>=0;j--) {
b[c[a[j]]-1] = a[j]; //注意
c[a[j]]--;
}
}
private int getMaxmium(int[] array) {
int temp=MIN;
for(int i:array) {
if(i > temp) {
temp = i;
}
}
return temp;
}
}
运行结果:
排序后数据:13 15 24 39 47 65 71 98