美文网首页
计数排序

计数排序

作者: Jackpot_0213 | 来源:发表于2021-03-16 15:15 被阅读0次

    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。


    Python

    def countingSort(arr, maxValue):
        bucketLen = maxValue+1
        bucket = [0]*bucketLen
        sortedIndex =0
        arrLen = len(arr)
        for i in range(arrLen):
    #判断这个元素是否出现过。没出现就是0,not 0 就是 1
            if not bucket[arr[i]]:
                bucket[arr[i]]=0
            bucket[arr[i]]+=1
    # 开始放数据
        for j in range(bucketLen):
    #存在这个数
            while bucket[j]>0:
                arr[sortedIndex] = j
                sortedIndex+=1
                bucket[j]-=1
        return arr
    

    Java

    public class CountingSort implements IArraySort {
    
        @Override
        public int[] sort(int[] sourceArray) throws Exception {
            // 对 arr 进行拷贝,不改变参数内容
            int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
    
            int maxValue = getMaxValue(arr);
    
            return countingSort(arr, maxValue);
        }
    
        private int[] countingSort(int[] arr, int maxValue) {
            int bucketLen = maxValue + 1;
            int[] bucket = new int[bucketLen];
    
            for (int value : arr) {
                bucket[value]++;
            }
    
            int sortedIndex = 0;
            for (int j = 0; j < bucketLen; j++) {
                while (bucket[j] > 0) {
                    arr[sortedIndex++] = j;
                    bucket[j]--;
                }
            }
            return arr;
        }
    
        private int getMaxValue(int[] arr) {
            int maxValue = arr[0];
            for (int value : arr) {
                if (maxValue < value) {
                    maxValue = value;
                }
            }
            return maxValue;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:计数排序

          本文链接:https://www.haomeiwen.com/subject/bdskcltx.html