计数排序

计数排序是遍历待排序序列元素,记录每个元素的个数,继而计算小于或等于此元素的元素个数。第二步是从右到左遍历待排序序列,将每个元素放到辅助序列的正确位置。

//计数排序
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]+" ");
    }
}

 

posted @ 2013-10-27 17:20  JMSXH  阅读(138)  评论(0编辑  收藏  举报