HighPerl Version 2.5
generated: Fri Jun 28 16:02:24 2002
1 #!/usr/local/bin/perl
2
3 print"\n\n\n\tDies ist das Programm 'quicksort.pl' !\n";
4 print"\tEs liest die Daten einer anzugebenden Datei ein und sortiert diese.\n";
5 print"\tDer neuen Datei wird ein 'n_' vorangestellt. \n\n";
6
7 print "\tBitte geben Sie den Namen der Datei ein, die sortiert werden soll: \n";
8
9 $name = <STDIN>; #Einlesen der Eingabe
10 chop($name); #Entfernen des "\n"
11
12 open(LESEN,"<"."$name") or die "Input-Error: $!\n"; #oeffnen der Datei
13 open(SCHREIBEN,">"."n_$name");
14 $a=0;
15 while (defined($arg=<LESEN>))
16 {
17 chomp ($arg);
18 @hilf = split(/ /,$arg);
19 foreach $hilf_word (@hilf)
20 {
21 @vec[$a] = $hilf_word;
22 $a++;
23 }
24 }
25
26 print "$a\n";
27 print "$vec[0]\n";
28 print "$vec[$a-1]\n";
29
30 &quick(0, $a-1); #Qicksort Programmaufruf
31
32 sub quick{
33 $test = ($_[0]+$_[1])/2;
34 $test=int($test);
35 $x=$vec[$test];
36 $i=$_[0];
37 $j=$_[1];
38
39 do
40 {
41 while($vec[$i] < $x) {$i++;}
42 while($x < $vec[$j]) {$j--;}
43 if ($i <= $j)
44 {
45 $hilf = $vec[$i];
46 $vec[$i] = $vec[$j];
47 $vec[$j] = $hilf;
48 $i++;
49 $j--;
50 #<STDIN>;
51 #print "$test\n";
52 #print "$x\n";
53 #print @vec;
54
55 }
56 } while($i <= $j);
57 #Rekursion
58 if($_[0] < $j) {quick($_[0], $j)};
59 if($i < $_[1]) {quick($i, $_[1])};
60 }
61
62 $a=0; #Ausgabe
63 foreach $vec_number (@vec)
64 {
65 print SCHREIBEN $vec[$a], " ";
66 $a++;
67 }
68 close(LESEN);
69 close(SCHREIBEN);
70 exit(0);
71