时间复杂度为O(n2)的排序方法,用perl重写三个方法——冒泡、简单选择和插入:
sub swap
{
my ($d1, $d2, @a) = @_;
my $tmp = $a[$d1];
$a[$d1] = $a[$d2];
$a[$d2] = $tmp;
}
sub bubbleSort
{
my @a = @_;
my $flag = 1;
for(my $i = 0; $i < @a && $flag; $i ++)
{
$flag = 0;
for(my $j = @a - 1; $j > $i; $j --)
{
if($a[$j - 1] > $a[$j])
{
swap($j - 1, $j, @a);
$flag = 1;
}
}
}
}
sub simpleSelectionSort
{
my @a = @_;
for(my $i = 0; $i < @a; $i ++)
{
my $min = $i;
for(my $j = $i + 1;$j < @a; $j ++)
{
if($a[$min] > $a[$j])
{
$min = $j;
}
}
if($i != $min)
{
swap($i, $min, @a);
}
}
}
sub insertSort
{
my @a = @_;
for(my $i = 1; $i < @a; $i ++)
{
if($a[$i] < $a[$i - 1])
{
my $tmp = $a[$i];
for(my $j = $i - 1; $a[$j] > $tmp; $j --)
{
$a[$j + 1] = $a[$j];
}
$a[$j + 1] = $tmp;
}
}
}