计数排序算法JAVA代码详细解答

计数排序是一种以空间换时间的排序方法,适用于小规模数据。由于需要创建一个长度为最大元素值的数组,可能导致空间浪费。当O(k)>O(nlog(n))时,其性能可能优于比较排序算法,但不适用于大规模排序。本文将详细讲解该算法的实现。
摘要由CSDN通过智能技术生成

计数排序

通识:计数排序说白了是一种以空间换时间的做法,在小规模排序中它的性能会比快排,归并要快一些,但是进行大规模排序是就可能出现性能过低的现象。其中有一个阈值O(k)>O(nlog(n)),其中O(nlog(n))是需要比较的排序这些算法的下限。

缺点:空间浪费可能较大,无法估量比如你相对数组number[2]={100000,1}进行排序,那么你就得创建一个数组长度为100001的数组来进行存储,比如我们称这个数组为store,那么我们就需要将number数组中的1存到store数组的1号位置store[1],同理,number中的100000存到store[100000]中。但是这100001长度的数组我们只用了两个位置,从而造成了空间上的浪费。

下面展示一些 内联代码片

Java代码展示
public class countsort {
    public static void count_sort(int a[]){
        int []number=new int[100];//首先开辟足够大的空间来存储数值,这也是计数方法的缺陷点,因为我们不知道数组中存的数值最大值是多少,
        // 如果数值够大那么将会损失很大的空间,比如数组a[2]={1,100000},其中数组长度为二,但是我们就需要创建一个长度为100001的数组来进行存储,这大大浪费了我们的空间
        //从而可以说是以空间换时间
        //java中你创建数组如果不初始化,那么系统会默认其值为0
        for (int i=0;i<a.length;i++)
        {
            number[a[i]]++;//当前要排序的数值放到新开辟数组的中(数字数值=新开辟数组下标号),之后让当前下标存储的数值+1,表示这个数已经出现一次
        }
        for (int i=0;i<number.length;i++)//进行输出
        {
            if(number[i]!=0)
            {
                for(int j=0;j<number[i];j++)
                {
                    System.out.print(i+" ");
                }
            }
        }

    }
    public static void main(String [] args){
        int []numbers={15,14,19,0,1,20,17,85,3,3};
        count_sort(numbers);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值