美文网首页data structure and algorithms
计数排序(Counting Sort)

计数排序(Counting Sort)

作者: spraysss | 来源:发表于2018-05-17 17:32 被阅读0次

计数排序的前提是长度为n数组里面的元素为整数并且元素值的范围为0~k,时间复杂度为O(n+k),当k=O(n)时,排序的时间复杂度为O(n),并且是一种稳定的排序
Counting Sort 的思想是使用一个辅助数组记录元素应该被放置的位置。比如以数组{2, 5, 3, 0, 2, 3, 0, 3}为例,比5小的元素有七个,那么排序之后5应该位于第八个元素的位置

java 实现

import java.util.Arrays;

public class CountingSort {
    public static int[] countingSort(int[] A, int k) {
        int[] B = new int[A.length];
        int[] C = new int[k + 1];
        //C数组表示A数据中元素的个数
        for (int i = 0; i < A.length; i++) {
            C[A[i]] += 1;
        }
        //C数组表示A中元素放的位置
        for (int i = 1; i <= k; i++) {
            C[i] = C[i] + C[i - 1];
        }
        for (int i = A.length - 1; i >= 0; i--) {
            B[C[A[i]] - 1] = A[i];//把元素放到对应的位置,-1是因为数组下标从0开始
            C[A[i]] -= 1;//可能有相同的元素
        }
        return B;
    }

    public static void main(String[] args) {
        int[] A = {2, 5, 3, 0, 2, 3, 0, 3};
        System.out.println(Arrays.toString(countingSort(A, 5)));
    }
}

相关文章

  • 常见排序算法

    冒泡排序 Bubble Sort 选择排序 Selection Sort 计数排序 Counting Sort 桶...

  • iOS 计数排序、基数排序、桶排序

      计数排序(Counting Sort)、基数排序(Radix Sort)、桶排序(Bucket Sort)适合...

  • 数组-计数排序

    采用计数排序方式对数组进行排序 计数排序百科:计数排序(Counting Sort),计数排序是一个非基于比较的排...

  • 08-计数排序(Counting Sort)

    计数排序(Counting Sort) 本节内容,继续介绍排序算法,在本节内容之前,介绍过7种排序算法,那计数排序...

  • 排序算法-8---计数排序

    # 排序算法-8---计数排序 概念 计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于...

  • 计数排序(Counting Sort)

    计数排序的前提是长度为n数组里面的元素为整数并且元素值的范围为0~k,时间复杂度为O(n+k),当k=O(n)时,...

  • 计数排序 counting sort

    计数排序 时间复杂度(平均、最坏、最好) O(n+k) 空间复杂度为O(n+k) 稳定性:稳定 n为数组元素个数,...

  • 计数排序(Counting Sort)

    1. 算法描述 计数排序(Counting Sort)不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储...

  • 计数排序(Counting Sort)

    一、算法概述 1.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于...

  • 计数排序(counting sort)

    计数排序于1954年由Harold H.Seward提出,适合对一定范围内整数进行排序,计数排序的核心思想是: 统...

网友评论

    本文标题:计数排序(Counting Sort)

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