在这个修改后的快速排序算法中,我将作为个人项目的一部分,用Perl进行剖析/重写:
sub quick_sort {
my @a = @_;
return @a if @a < 2;
my $p = splice @a, int( $#a / 2 ), 1;
(
quick_sort( grep $_ < $p, @a ),
$p,
quick_sort( grep $_ >= $p, @a ),
);
}
print "Enter a list of numbers, separated by commas (e.g. 2,5,1,7): ";
my @a = split ",", <STDIN>;
@a = quick_sort(@a);
chomp(@a);
print "@a\n";
我很困惑这个陈述,或者更确切地说,一组用逗号隔开的陈述(我猜是?)做了什么:
quick_sort(grep $_ < $p, @a),
$p,
quick_sort(grep $_ >= $p, @a);
我甚至不知道这叫什么,所以在谷歌上搜索“用逗号分隔的perl语句”之类的东西也没有发现什么有用的东西。我试着用分号分隔它们,但是当我尝试这样做的时候,输出是不正确的。这叫什么?它在做什么?
2条答案
按热度按时间uttx8gqw1#
最后三行构成一个语句,其结果是一个列表:
这个列表就是子例程的结果。如果使用分号,则子例程的结果将是:
这是不正确。
shstlldc2#
它是对子例程的递归调用。这是它真正的作用:
}
由于slice是一个破坏性函数,因此在每次迭代中,数组都会收缩到满足以下条件的点并退出。