Bucket Sort and Cardinality sort

  桶排序算法介绍...

桶排序

  • T(N,M) = O(M+N),M 个桶的情况
    • N >> M的时候是相对教优秀的算法
    • M >> N ???
  • 假设我们有N = 10个整数,N ∈ [0,999],(此时 M = 1000);我们便不能在线性时间下完成排序。

基数排序:按照数字的进制排序(10)

  • example:
  • input: 64 8 216 512 27 729 0 1 343 125
    • 使用次位优先(Least Significant Digit)
    • 先按照个位数将元素放到对应的桶Pass1
    • 按照十位放到对应的桶中
Bucket 0 1 2 3 4 5 6 7 8 9
Pass 1(个位) 0 1 512 343 64 125 216 27 8 729
Pass 2(十位) 0
1
8
512
216
125
27
729
343 64
Pass 3 (百位) 0
1
8
27
64
125 216 343 512 729
  • 最终的顺序,分别从每个桶中顺序读取即可。

时间复杂度: T= O(P(N+B))

  • 较好情况:取决于基数-多少个桶 (B << N时差不多是一个线性复杂度的算法)