这种排序是改进后的排序,有希尔、堆、归并和快速排序,其中快速排序比较“好”:
sub swap
{
my ($d1, $d2, @a) = @_;
my $tmp = $a[$d1];
$a[$d1] = $a[$d2];
$a[$d2] = $tmp;
}
sub quickSort
{
my (@a, $low, $high) = @_;
while($low < $high)
{
my $pivot = pivotSelection(@a, 0, $length);
qucikSort(@a, 0, $pivot - 1);
$low = $pivot + 1;
}
}
sub pivotSelection
{
my (@a, $low, $high) = @_;
my $m = int($low + ($high - $low) / 2);
swap(@a, $low, $high) if($a[$low] > $a[$high]);
swap(@a, $high, $m) if($a[$m] > $a[$high]);
swap(@a, $m, $low) if($a[$m] > $a[$low]);
my $pivotkey = $a[$low];
while($low < $high)
{
if($low < $high and $a[$high] >= $pivotkey)
{
$high --;
}
swap($low, $high, @a);
if($low < $high and $a[$high] <= $pivotkey)
{
$low ++;
}
swap($low, $high, @a);
}
return $low;
}