计数排序
计数排序是遍历待排序序列元素,记录每个元素的个数,继而计算小于或等于此元素的元素个数。第二步是从右到左遍历待排序序列,将每个元素放到辅助序列的正确位置。
//计数排序 public class CountSort { public int[] countSort(int[] a,int k) { int[] c=new int[k+1];//构造一个计数数组,k是待排序数组的最大值 int length=a.length; int[] b=new int[length];//构造一个b数组 for(int i=0;i<length;i++) { c[a[i]]++;//计算a数组中每个元素的个数 } for(int i=1;i<k+1;i++) c[i]=c[i]+c[i-1];//计算每个元素小于或等于本身的个数 for(int i=length-1;i>=0;i--) { b[c[a[i]]-1]=a[i];//从后往前遍历a数组,将每个数放入到b数组的正确位置,由于有O的存在因此减去1 c[a[i]]--;//每次插入到b中一个元素则在c数组中相应的数就-1 } return b;//返回排好序的b数组 } public static void main(String[] args) { CountSort c=new CountSort(); int[] a={4,8,3,6,9,7,5,2,1}; int[] b=c.countSort(a,9); for(int i=0;i<a.length;i++) System.out.print(b[i]+" "); } }