不需要比较的 计数排序

1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
2. 时间复杂度:O(MAX(N,范围))
3. 空间复杂度:O(范围)
4. 稳定性:稳定

计数排序,首先得知道你的元素最大值,如果想要优化,那得到最小元素也是必须的;

计数排序就像给乱序扑克排序一样:你手里的牌大小是多少,就放在对应下标的位置上,这个位置上就多了一张牌,还有一张就在放一张,以此类推;

而我们把这个能放牌的桌子,用了一个数组表示,就像52牌我只需要十三个位置一样;每个位置放四张;放好之后不就已经排序好了吗?只是扑克牌每个位置都是四张罢了;如果缺个几张牌,其结果也是一样;

关于优化 则是对tmpArray数组的优化,考虑如果给你 最小99  最大 100;如果没有最小值,你是不是就要创建101大小的数组;

而有最小值,就可以避免这个尴尬;

代码入下

  public static void main(String[] args) {
        int[] array = new int[]{2,3,4,5,5,6,5,5};
        sort(array,6,2);//最大 最小值
    }


    private static void sort(int[] array, int max, int min){
        int[] tmpArray = new int[max-min+1];
        for (int i1 : array) {
            tmpArray[i1-min]++;
        }
        for(int i = 0; i < max-min+1; i++){
            for(int j = tmpArray[i]; j > 0; j--){
                System.out.println(min+i);
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值