计数排序

计数排序:所谓计数排序它就是利用数组下标来确定元素正确位置

直接看下面代码,代码如下

public static int[] countsort(int[] arr) {
        int max = arr[0];
        int min = arr[0];
        //找出最大值和最小值
        for(int i = 0;i<arr.length;i++) {
            if(arr[i] > max)
                max = arr[i];
            if(arr[i] < min)
                min = arr[i];
        }
        //最大值减去最小值表示间距
        int d = max - min;
        //定义统计数组,统计对应元素个数
        int[] array = new int[d+1];
        for(int i = 0;i<arr.length;i++) {
            array[arr[i] - min]++;
        }
        
        //统计数组做变形,后面的元素等于前面元素之和
        /*
             统计数组从第二个元素开始,每一个元素都加上前面所有元素之和,这样想加的目的是让统计
             数组存储的元素值等于相应整数的最终排序位置
         */
        int sum = 0;
        for(int i = 0;i<array.length;i++) {
            sum += array[i];
            array[i] = sum;
        }
        /*
             接下来我们创建新数组,长度和传入数组一致。然后从后向前遍历输入数组
             第一步,我们遍历数组最后一个元素,然后在统计数组array中找到其对应的下标的元素
             该元素表示其排序位置,然后该元素减1,
             第二步,遍历倒数第二个元素,方法和上面一样......
         */
        //倒序遍历原始数组,从统计数组找到正确位置,输出到结果数组
        int[] countArray = new int[arr.length];
        for(int i = arr.length - 1;i>=0;i--) {
            countArray[array[arr[i] - min] - 1] = arr[i];
            array[arr[i] - min]--;
        }
        return countArray;
    }
    
原文地址:https://www.cnblogs.com/du001011/p/10440775.html