Autor Beitrag
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Fr 19.12.08 12:14 
Hallo Leute,

beim Test von Selectionsort ist mir ein Problem bei der Messung der Sortierzeit aufgefallen.
Der eigentlich korrekte Quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TSort.SortiereSelectionSort;
var i, j, PosMaximum : Integer;
begin
  for i:=FAnzahl downto 2 do
    begin
      PosMaximum:=1;
      for j:=2 to i do
        if FSortArray[j]>FSortArray[PosMaximum]
          then PosMaximum:=j;
      Tausche(i,PosMaximum);
    end;
end;

liefert eine um ca. 5 Prozent schlechtere Sortierzeit als der zweite Quelltext, der einen Schleifendurchlauf mehr durchführt, als benötigt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TSort.SortiereSelectionSort3;
var i, j, PosMaximum : Integer;
begin
  for i:=FAnzahl downto 2 do
    begin
      PosMaximum:=1;
      for j:=1 to i do
        if FSortArray[j]>FSortArray[PosMaximum]
          then PosMaximum:=j;
      Tausche(i,PosMaximum);
    end;
end;


Hat jemand eine Erklärung, warum bei mehr Durchläufen (Quelltext 2) die Sortierzeit länger wird?
Ach so, Messfehler sollten ausgeschlossen sein, da ich jeden Wert mit ca. 500 Sortieraufrufen gemittelt habe.

ub60
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 19.12.08 12:37 
Das könnte an einer performancemäßig schlechteren Umsetzung der Schleife liegen, da müsstest du mal den Assemblerquelltext vergleichen.
Ich werde mal ausprobieren, ob ich das bei mir reproduzieren kann.