You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问我通过数组下标映射实现的排序算法属于什么类型?

你实现的是计数排序(Counting Sort),属于非比较类排序算法的一种,也可看作单元素桶场景下的桶排序特殊实现,核心逻辑是利用数组下标直接定位元素位置,跳过常规排序的数值比较步骤,最优时间复杂度可以达到线性的O(n+k)(n为待排序元素数量,k为待排序数值的取值范围大小)。

你当前的实现默认适配「待排序元素为非负整数、无重复值」的场景,直接将元素值作为数组下标赋值,即可完成自动排序,对应代码如下:

my @arg = (5, 14, 12, 9, 1, 17, 3, 19, 20, 4, 6, 15, 8, 18, 7, 2, 10, 13, 11, 16);
my @out;
map { $out[$_] = $_ } @arg;
print join " ", @out;

你提到的两个注意点也完全符合计数排序的特性:

  • 下标出现空洞是计数排序的典型特征,当待排序数值分布稀疏时会产生额外的空间浪费,输出前过滤掉未赋值的空下标位即可完成压缩。
  • 原生实现不支持双精度浮点数,因为数组下标只能对应整数,需要兼容浮点数场景时可以调整数值映射逻辑,或者切换为基于比较的排序算法实现。

基准测试结果

你提供的性能测试数据如下:

Rate uniqsort   bubble  mapping perlsort
    uniqsort  82274/s       --     -29%     -87%     -90%
    bubble   115925/s      41%       --     -81%     -86%
    mapping  614399/s     647%     430%       --     -25%
    perlsort 814352/s     890%     602%      33%       --

各测试项说明:

  • &uniqsort:调用List::MoreUtils库,通过uniq sort @arr实现
  • &bubble:基础冒泡排序实现
  • &mapping:本次实现的映射式计数排序
  • &perlsort:使用Perl内置sort {$a<=>$b} @arr实现的排序

从测试结果可以看出,当前场景下你实现的计数排序性能远高于冒泡排序和普通去重排序,仅略低于Perl内置的高度优化的排序实现,符合计数排序在适配场景下的性能表现。

内容的提问来源于stack exchange,提问作者Arsenii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:54:03