我試圖在Perl中實現合併排序,我對Perl很新,我知道我在做數組引用的時候出錯了。完成該過程後,數組最終保持相同的值。請幫忙,因爲我沒有看到我出錯的地方。Perl mergesort - 數組引用
更正後的代碼:
use strict;
use warnings;
my (@aref, @auxref) =();
my ($hi, $lo, $i, $j, $k, $n) = 0;
@aref = (5, 7, 6, 3, 4, 1, 8, 9, 4);
$n = @aref;
mergeSort(\@aref, \@auxref, 0, $n - 1);
print "@auxref\n";
print "@aref\n";
sub mergeSort {
my ($aref) = $_[0];
my ($auxref) = $_[1];
my $lo = $_[2];
my $hi = $_[3];
if ($hi <= $lo) { return; }
my $mid = 0;
$mid = int($lo + ($hi - $lo)/2);
mergeSort($aref, $auxref, $lo, $mid);
mergeSort($aref, $auxref, $mid + 1, $hi);
merge($aref, $auxref, $lo, $mid, $hi);
}
sub merge {
my ($aref) = $_[0];
my ($auxref) = $_[1];
my $lo = $_[2];
my $mid = $_[3];
my $hi = $_[4];
for ($i = $lo ; $i <= $hi ; $i++) {
$auxref->[$i] = $aref->[$i];
}
$i = $lo;
$j = $mid + 1;
for ($k = $lo ; $k <= $hi ; $k++) {
if ($i > $mid) {
$aref->[$k] = $auxref->[$j];
$j++;
}
elsif ($j > $hi) {
$aref->[$k] = $auxref->[$i];
$i++;
}
elsif ($auxref->[$i] <= $auxref->[$j]) {
$aref->[$k] = $auxref->[$i];
$i++;
}
else {
$aref->[$k] = $auxref->[$j];
$j++;
}
}
}
試過,仍然沒有工作。我已經更新了上面的代碼。 – chettyharish
添加 - >也沒有幫助 – chettyharish
你仍然有'$ auxref [$ i] = $ aref [$ i]'在你的'merge'子文件中。所以這實際上是指你在第4行定義的數組,而不是你在合併子開頭聲明的數組引用。 – aidan