[英]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.