我正在尝试在 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我再次遍历数组时,它没有排序。
Hyn*_*dil -1
您应该使用列表版本来避免这种混乱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";
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式防止很多错误,并且代码更具可读性,因为您想要实现的意图清晰可见。这导致你意识到你的算法是错误的,你可能想要的是
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";
Run Code Online (Sandbox Code Playgroud)