Hallo,
danke für deine Antwort. Hatte ich erst gar nicht gesehen, da ich dachte, dass es eh keinen Interessiert. Ich habe meinen Fehler gefunden und ihn korrigiert. So funktioniert es:
Code:
#!/usr/bin/perl5.8.8
@array=();
for ($s=0; $s<10000; $s++)
{
@array[$s]=(int rand(100));
}
$acount=@array;
$temp=0;
$vergleichswert1=0;
$vergleichswert2=0;
print "@array\n";
for ($i=0; $i<$acount; $i++)
{
for ($i2=0; $i2<=$acount; $i2++)
{
if ($array[$vergleichswert1] >= $array[$vergleichswert2])
{
$vergleichswert2++;
}
else
{
$temp=$array[$vergleichswert2];
$array[$vergleichswert2]=$array[$vergleichswert1];
$array[$vergleichswert1]=$temp;
$temp=0;
}
}
$vergleichswert1++;
$vergleichswert2=0;
}
print "@array\n";
Dann habe ich mich noch an etwas anderem probiert, was um einiges schneller ist, und auch einwandfrei funktioniert:
Code:
#!/usr/bin/perl
#Programm funktioniert
use strict;
our @array = map { int(rand()*100) } (1..$ARGV[0]);
print "Zahlen unsortiert:\n @array\n";
quicksort(0, $#array);
sub quicksort
{
my ($links ,$rechts) = @_;
my $pivot = int ($array[($links + $rechts) / 2]);
my $l = $links;
my $r = $rechts;
my $i;
do {
while ($array[$l] < $pivot) { $l++; }
while ($array[$r] > $pivot) { $r--; }
if ($l <= $r) {
vertauschen($l, $r);
$l++;
$r--;
}
}while (($l <= $r));
if($links < $r) { quicksort($links, $r); }
if($l < $rechts) {quicksort($l, $rechts); }
}
sub vertauschen
{
my ($l, $r) = @_;
my $temp;
$temp = $array[$l];
$array[$l] = $array[$r];
$array[$r] = $temp;
}
print "Zahlen sortiert:\n @array\n";
In dem Sinne...
Dok