Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Arrayzugriff nimmt irgendwelche Wahllos-Variableninhalte aus Speicher

  Alt 20. Apr 2015, 11:40
Wenn wir den Wikipedia-Pseudeo-Code mal nach Delphi übersetzen (das geht quasi 1:1, denn das riecht nach gedeutschtem Pascal)
Code:
prozedur SelectionSort( A : Liste sortierbarer Elemente )
  n = Länge( A )
  links = 0
  wiederhole
    min = links
    für jedes i von links + 1 bis n wiederhole
      falls A[ i ] < A[ min ] dann
          min = i
      ende falls
    ende für
    Vertausche A[ min ] und A[ links ]
    links = links + 1
  solange links < n
prozedur ende
in Delphi (aber falsch)
Delphi-Quellcode:
procedure SelectionSort( var A : TArray<Integer> );
var
  n, i, links, min : Integer;
  temp : Integer;
begin
  n := Length( A );
  links := 0; // soso, das erste Element hat den Index 0 :o)
  repeat
    min := links;
    for i := links + 1 to n do
    begin
      if A[ i ] < A[ min ] then
        min := i:
    end;
    
    temp := A[ links ];
    A[ links ] := A[ min ];
    A[ min ] := temp;

    links := links + 1;
  until not( links < n );
end;
und nun mal richtig
Delphi-Quellcode:
procedure SelectionSort( var A : TArray<Integer> );
var
  n, i, links, min : Integer;
  temp : Integer;
begin
  n := High( A );
  links := Low( A );
  while links < n do
  begin
    min := links;
    for i := links + 1 to n do
    begin
      if A[ i ] < A[ min ] then
        min := i:
    end;
    
    if links <> min then
    begin
      temp := A[ links ];
      A[ links ] := A[ min ];
      A[ min ] := temp;
    end;

    links := links + 1;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat