![]() |
![]() |
![]() |
QuickSort-Algorithmus, Umsetzungsbeispiel mit Perl @zahlen = ( 11, 3, 53, 12, 83, 24, 2, 8, 17, 9, 39 ); $z = @zahlen; &qsort(0, $z-1); foreach my $n (@zahlen) { print "$n "; } sub qsort() { my $left = shift; my $right = shift; if($left < $right) { my $part = dopart($left, $right); &qsort($left, $part -1); &qsort($part +1, $right); } } sub dopart() { my $left = shift; my $right = shift; my $le = $left; # Arbeitsvariable my $ri = $right; # Arbeitsvariable my $pivotPos = $right; # die Position des Pivot-Elements my $pivotWert = $zahlen[$pivotPos]; while($le < $ri) # die linke und rechte Arbeitsvariable dürfen nicht aneinander vorbeilaufen { # von links nach rechts suchen while( $zahlen[$le] <= $pivotWert && $le < $right ) { $le += 1; } # von rechts nach links suchen while( $zahlen[$ri] >= $pivotWert && $ri > $left ) { $ri -= 1; } if($le < $ri) # nicht bereits aneinander vorbeigelaufen? { swap($le, $ri); # Positionen tauschen } } if($zahlen[$le] > $pivotWert) { swap($le, $pivotPos); } return $le; } sub swap() { my $a = shift; my $b = shift; my $remA = $zahlen[$a]; $zahlen[$a] = $zahlen[$b]; $zahlen[$b] = $remA; } |