【CLRS】《算法导论》读书笔记(三):计数排序(Counting sort)、基数排序(Radix sort)和桶排序(Bucket sort)...

计数排序(Counting sort)

维基百科:http://en.wikipedia.org/wiki/Counting_sort

时间复杂度:O(n)

 

技术排序的基本思想:对每一个输入元素 x ,确定小于 x 的元素个数。利用这一信息,就可以直接把 x 放到它在输出数组中的位置上了。

 

伪码:

COUNTING-SORT(A, B, k)

  let C[0 .. k] be a new array

  for i = 0 to k

    C[i] = 0

  for j = 1 to A.length

    C[A[j]] = C[A[j]] + 1

  // C[i] now contains the number of elements equal to i.

  for i = 1 to k

    C[i] = C[i] + C[i - 1]

  // C[i] now contains the number of elements less than or equal to i.

  for j = A. length downto 1

    B[C[A[j]]] = A[j]

    C[A[j]] = C[A[j]] - 1

 

基数排序(Radix sort)

维基百科:http://en.wikipedia.org/wiki/Radix_sort

最差时间复杂度:O(k n),其中k为位数

基数排序分类:LSD(Least Significant Digital)和MSD(Most Signifacant Digital)

 

LSD伪码:

RADIX-SORT(A, d)

  for i = 1 to d

    use a stable sort to sort array A on digit i

 

桶排序(Bucket sort)

维基百科:http://en.wikipedia.org/wiki/Bucket_sort

平均时间复杂度:O(n)

 

Bucket sort works as follows:

  1. Set up an array of initially empty "buckets."
  2. Scatter: Go over the original array, putting each object in its bucket.
  3. Sort each non-empty bucket.
  4. Gather: Visit the buckets in order and put all elements back into the original array.

 

伪码:

BUCKET-SORT(A)

  n = A.length

  let B[0 .. n - 1] be a new array

  for i = 0 to n - 1

    make B[i] an empty list

  for i = 1 to n

    insert A[i] into list B[nA[i]]

  for i = 0 to n -1

    sort list B[i] with insertion sort

  concatenate the list B[0], B[1], ..., B[n -1] together in order 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值