繁体   English   中英

如何在Perl中创建冒泡排序

[英]How do I create a Bubble Sort in Perl

我正在尝试在Perl中创建一个简单的冒泡排序,但它似乎不起作用。 谁能帮我?

码:

for ( my $i = 1; $i < @array; $i++ ) {

    for ( my $k = 0; $k = @array < $i - 1; $k++ ) {

        if ( $array[$k] > $array[ $k + 1 ] ) {
            $temp            = $array[$k];
            $array[$k]       = $array[ $k + 1 ];
            $array[ $k + 1 ] = $temp;
        }
    }
}

然后,当我再次遍历数组时,它不会被排序。

外循环是否不应该从数组的后面移到前面? 同样,for内部循环中的$k = @array< $i - 1语句也没有意义。

my @array = (5,6,3,1,7,3,2,9,10,4);

my $i, $k;
for ($i = $#array; $i > 0; $i--) { # $#array = last index = length-1
    for ($k = 0; $k < $i; $k++) {
        if ($array[$k] > $array[$k+1]) {
            ($array[$k], $array[$k+1]) = ($array[$k+1], $array[$k]);
        }
    }
}
print "@array\n"; # 1 2 3 3 4 5 6 7 9 10

我不敢相信没有人给他真正的PERL答案。 我相信他是在Perl中而不是转录到Perl的C语言中要求它的:

for($i=$#a;$i>0;$i--){$m=$a[0];splice(@a,0,$i+1,map{$s=$m;$m>$_?$_:($s,$m=$_)[0]}@a[1..$i],$m);} 

您应该通过使用for列表版本来避免这种混乱

my @array = ( 5, 6, 3, 1, 7, 3, 2, 9, 10, 4 );

for my $i ( 1 .. $#array ) {
    for my $k ( 0 .. $i - 1 ) {
        @array[ $k, $k + 1 ] = @array[ $k + 1, $k ]
            if $array[$k] > $array[ $k + 1 ];
    }
}

print "@array\n";

这样可以避免很多错误,并且代码更具可读性,因为您明确希望实现什么目的。 导致您意识到算法错误,您可能想要的是

my @array = ( 5, 6, 3, 1, 7, 3, 2, 9, 10, 4 );

for my $i ( reverse 1 .. $#array ) {
    for my $k ( 0 .. $i - 1 ) {
        @array[ $k, $k + 1 ] = @array[ $k + 1, $k ]
            if $array[$k] > $array[ $k + 1 ];
    }
}

print "@array\n";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM