Thread Liste von Arrays sortieren (14 answers)
Opened by scriptor at 2018-04-12 08:54

Linuxer
 2018-04-13 11:52
#188273 #188273
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Hi,

Deine Zähler sollten mit 0 initialisiert werden, nicht mit 1. Solange keine der beiden Funtionen aufgerufen wurde, sollte die Anzahl der Aufrufe auch Null sein.

Du zählst die Anzahl der Funktionsaufrufe, aber nicht wie viele Vergleiche angestellt werden.
Die Anzahl der Vergleiche bleibt die selbe, wie clms schon darlegte.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
my $cnt_sort = 0;
my $cnt_sort_schwartz = 0;
my $comparison = 0;

my @array = (
    [25,1],
    [3,7],
    [1,2],
    [2,4],
    [2,2],
    [35,34]
);

# Native
my @dummy = sort{ $comparison++; helper($a) <=> helper($b) }@array ;

print "Anzahl der Vergleiche: $comparison\n";
print "Anzahl der Aufrufe cnt_sort: $cnt_sort\n";


# nach Schwartz
$comparison = 0;
my @dummy_schwartz =
    map{$_->[0]}
    sort{ $comparison++; $a->[1] <=> $b->[1] }
    map{[$_, helper_schwartz($_)]} @array;

print "\nAnzahl der Vergleiche: $comparison\n";
print "Anzahl der Aufrufe cnt_sort_schwartz: $cnt_sort_schwartz\n";

sub helper{
    my $ref = shift;
    $cnt_sort++;
    return abs($ref->[1] - $ref->[0]);
}

sub helper_schwartz{
    my $ref = shift;
    $cnt_sort_schwartz++;
    return abs($ref->[1] - $ref->[0]);
}

__END__

Anzahl der Vergleiche: 8
Anzahl der Aufrufe cnt_sort: 16

Anzahl der Vergleiche: 8
Anzahl der Aufrufe cnt_sort_schwartz: 6
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Liste von Arrays sortieren