这是什么类型的排序?
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% --
- &uniqsort - 通过
uniq sort @arr
使用 List::MoreUtils
;
- &bubble - 基本冒泡排序
- &mapping - 这个
- &perlsort - 使用
sort {$a<=>$b} @arr
首先,它不会对值进行排序,因为它会产生以下内容:
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;
我写了一个简单的排序算法,想知道它是什么类型的? 它只是将初始数组的元素映射到具有初始元素值索引的空数组中。
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% --
- &uniqsort - 通过
uniq sort @arr
使用List::MoreUtils
; - &bubble - 基本冒泡排序
- &mapping - 这个
- &perlsort - 使用
sort {$a<=>$b} @arr
首先,它不会对值进行排序,因为它会产生以下内容:
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;