HighPerl Version 2.5
generated: Fri Jun 28 16:55:29 2002
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 print <<END_INTRO;
6
7 Dies ist das Programm 'quicksort.pl' !
8 Es liest die Daten einer anzugebenden Datei ein und sortiert diese.
9 Der neuen Datei wird ein 'n_' vorangestellt.
10
11 END_INTRO
12
13 our ($SourceFile, @Vec);
14
15 $SourceFile = shift || do {local $_;
16 print "\tBitte geben Sie den Namen der Datei ein, die sortiert werden soll:\n\t> ";
17 print "\t>" until defined($_=<STDIN>) and do{chomp;-f};
18 $_
19 };
20
21
22 open LESEN, "<$SourceFile" or die "Error opening $SourceFile: $!\n";
23 open SCHREIBEN,">n_$SourceFile" or die "Error opeing n_$SourceFile: $!\n";
24
25 # EINLESEN
26 while(<LESEN>) {
27
28 chomp;
29 push @Vec,split;
30 }
31
32
33 print "$.\n";
34 print "$Vec[0]\n";
35 print "$Vec[@Vec-1]\n";
36
37 &quick(0, @Vec-1); #Qicksort Programmaufruf
38
39 sub quick {
40 my ($l,$r) = @_;
41
42 my $pivot =
43 $Vec[ int( ($l+$r)/2 ) ];
44
45 my ($i,$j) = ($l,$r);
46
47 do
48 {
49 while($Vec[$i] lt $pivot) {$i++}
50 while($Vec[$j] gt $pivot) {$j--}
51
52 if ($i <= $j)
53 {
54 my $t = $Vec[$i];
55 $Vec[$i] = $Vec[$j];
56 $Vec[$j] = $t;
57
58 $i++;$j--;
59 }
60
61 } while($i <= $j);
62
63 #Rekursion
64 if($l < $j) { quick($l, $j) }
65 if($i < $r) { quick($i, $r) }
66 }
67
68
69 #Ausgabe
70 print SCHREIBEN join ' ',@Vec;
71
72 close LESEN;
73 close SCHREIBEN or die "Error closing output file: $!";
74