• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-09-04 17:40 Aet 隐藏边栏 |   抢沙发  1 
文章评分 0 次,平均分 0.0

简述

基数排序思想,假设对数组A[p...r]排序,其中数组中所有元素都为正整数,并且不超过RADIXWITH位(有模板的RADIXWITH参数指定):

  • 首先对A中所有元素按照个位数大小进行排序(原地的)
  • 再对A中所有元素按照个十数大小进行排序(原地的)
  • 一直到最后按照A中所有元素的最高位的数字大小进行排序(原地的)

复杂度

时间复杂度 O(d(n+k)),其中d位数字的最大位宽(即这里都是d位数的整数),k为每个位数上数字取值(这里取0,1,2,3,...9
原地排序

注意

这里尤其要重点强调,用于对指定位上的数字进行排序时,必须要满足稳定性。
快速排序就是非稳定的

用小于比较的插入排序是稳定的
用小于等于比较的插入排序是不稳定的
这里必须对整数才能采取基数排序。由static_assert(...,...)确保

实现

  • num
    • 待抽取数字的正整数
  • n
    • 指定的位数(0表示个位,1表示十位,...)

  • begin
    • 待排序序列的起始迭代器(也可以是指向数组中某元素的指针)
  • end
    • 待排序序列的终止迭代器(也可以是指向数组中某元素的指针)
  • radix_width
    • 待排序元素(必须是整数)的最大位宽,必须非0(由assert(radix_width!=0)确保)

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享