这是什么类型的排序?

What type of sorting is this?

我写了一个简单的排序算法,想知道它是什么类型的? 它只是将初始数组的元素映射到具有初始元素值索引的空数组中。

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;

当然可以将收缩添加到输出数组中,因为在现实世界中索引中可以有 holes。 此外,可以扩展此示例以处理双打。为此,我建议使用其他数据结构(即:树或链表)

更新

基准:

                   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%       --

首先,它不会对值进行排序,因为它会产生以下内容:

undef, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20

注意额外的元素。它是 pigeonhole sort.

的部分损坏(不过滤空元素)、部分专门化(不允许重复)的版本

顺便说一句,

@out[@arg] = @arg;

应该比

map { $out[$_] = $_ } @arg;