计数排序-Java
计数排序--Java
计数排序是一种非基于比较的排序算法。它的优势在于一定范围内的整数排序时,它的复杂度为O(n+k),快于任何比较排序,其中n是待排序个数,k为数的范围。因此,基数排序本来就是针对事先对待排序数据有所了解,即这些数是如何分布的,如果有负数或者有少量数极大,就不适合使用计数排序。
public class CountintSort { public static int[] CountintSort(int[] a){ int[] b=new int[a.length]; int max=a[0],min=a[0]; for(int i=0;i<a.length;i++){ if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; } int k=max-min+1; int[] c=new int[k]; for(int i=0;i<a.length;i++){ c[a[i]-min]+=1; } for(int i=1;i<c.length;i++){ c[i]=c[i]+c[i-1]; } for(int i=a.length-1;i>=0;i--){ b[--c[a[i]-min]]=a[i]; } return b; } public static void main(String[] args){ int[] a={3,6,5,2,1,7,9,6,5}; int[] b=CountintSort(a); for(int i=0;i<b.length;i++){ System.out.print(b[i]+" "); } } }