Einzelnen Beitrag anzeigen

Benutzerbild von JanWe
JanWe

Registriert seit: 23. Mär 2015
Ort: NRW
78 Beiträge
 
Delphi 7 Personal
 
#11

AW: Arrayzugriff nimmt irgendwelche Wahllos-Variableninhalte aus Speicher

  Alt 22. Apr 2015, 09:21
grüß Euch,

mhh, habb jetztmehrmals was probiert ...
v.a. mit dem untenstehenden Code:
[...]
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;
ich hab A[] mal gegen DYNarray ausgetauscht und Links NUll gesetzt, weil das das niedrigste Feld im Array ist.
Delphi-Quellcode:
procedure SelectionSort( A : Integer ); // hab die direkte Übergabe momentan gestrichen - war mir zu kompliziert.
var
  n, i, links, min : Integer;
zahl1, zahl2, temp : Integer;
begin
  n := form1.Bildmax;
  links := 0 ;
  while links < n do
  begin
    min := links;
    for i := links + 1 to n do
    begin
      if Form1.DynARray[ i ].Kriterium < Form1.DynARray[ min ].Kriterium then
        min := i;
    end;

    if links <> min then
    begin
      temp := Form1.DynARray[ links ].SortListNumber;
      Form1.DynARray[ links ].SortListNumber := Form1.DynARray[ min ].SortListNumber;
      Form1.DynARray[ min ].SortListNumber := temp;
    end;

    links := links + 1;
  end;
end;
So (Kriterium wird in der Position NICHT VERSCHOBEN !!!! nur die SortListNummer!!):
Durchgeang 1 : Original reihenfolge VOR dem Sortieren
[Code]
SortListNummer; OriginalPlatzNummer; Kriterium
0 0 80171
1 1 63091
2 2 487258
3 3 3735
4 4 24149
5 5 24149
6 6 24149
7 7 5863
8 8 242816
9 9 24039
___________________________
Nach Sortieren: (1x geklickt)
0 0 80171
0 1 63091
1 2 487258
2 3 3735
3 4 24149
4 5 24149
5 6 24149
6 7 5863
7 8 242816
8 9 24039
-------------------------

So kommt jetzt die zweite 0 her? und warum fehlt die 9?
Jan

Geändert von JanWe (22. Apr 2015 um 09:25 Uhr)
  Mit Zitat antworten Zitat