[Delphi] probleem met sorteren arrays

Pagina: 1
Acties:

  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03-2025
Ik ben bij het programmeren tegen deze vreemde fout aangelopen:
Ik wil 2 arrays sorteren (max. 20 waarden) ik gebruik hiervoor onderstaande procedure.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.sortarrays(var arr: temparrays; Top: integer);
var
  counter, min, look:integer;
  temp: real;
begin
  for counter:=0 to top do begin
    min := counter;
    for look:=counter+1 to top do begin
      if (arr[look] < arr[min]) then begin
        min := look;
      end;
      temp := arr[min];
      arr[min] := arr[counter];
      arr[counter] := temp;
    end;
  end;
end;


Na de eerste sort gaat het mis, de volgende arrays worden niet meer correct gesorteerd, heb ik nu ergens een denkfout gemaakt of is het iets anders?
Ik heb ook al andere sorting procedures gebruikt maar ze werken eigenlijk allemaal niet...
ooh ja, temparrays is een type array[0..max] of real

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
waarom geef je je array als var door? Een array wordt toch zowiezo al by reference doorgegeven?

[ Voor 21% gewijzigd door whoami op 22-01-2003 18:05 ]

https://fgheysels.github.io/


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Mooie sorteerroutine :+

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.sortarrays(var arr: temparrays; Top: integer);
var
  counter, min, look:integer;
  temp: real;
begin
  for counter:=0 to top do begin
    min := counter;
    for look:=counter+1 to top do begin
      if (arr[look] < arr[min]) then begin
        min := look;
      end;
      temp := arr[min];              // het kleinste element moet je pas vooraan zetten
      arr[min] := arr[counter];  // als je 'look'-for is afgelopen.
      arr[counter] := temp;
    end;
  end;
end;

Siditamentis astuentis pactum.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Waarom gebruik je niet QuickSort van TList? Dit is het wiel opnieuw uitvinden en bovendien is QuickSort f*ckin snel :)
Delphi:
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
procedure QuickSort(SortList: PPointerList; L, R: Integer;
  SCompare: TListSortCompare);
var
  I, J: Integer;
  P, T: Pointer;
begin
  repeat
    I := L;
    J := R;
    P := SortList^[(L + R) shr 1];
    repeat
      while SCompare(SortList^[I], P) < 0 do
        Inc(I);
      while SCompare(SortList^[J], P) > 0 do
        Dec(J);
      if I <= J then
      begin
        T := SortList^[I];
        SortList^[I] := SortList^[J];
        SortList^[J] := T;
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then
      QuickSort(SortList, L, J, SCompare);
    L := I;
  until I >= R;
end;

日本!🎌


Verwijderd

Ik heb ff een stukje code in elkaar gefixt wat wel werkt. De code is brak (teveel vars, array public gedefinieerd), maar expres gedaan. Ik denk dat jij het op deze brakke wijze beter kunt lezen. (je gebruikt nl zelf ook onmogelijk vars e.d. ) :D
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure Sorteer(min,max: Integer);
var
  i, j, beste_j,beste_waarde : Integer;
begin
  for i := min to max - 1 do
  begin
    beste_waarde := HighScore[i];
    beste_j := i;
    for j := i + 1 to max do
    begin
        if (HighScore[j] < beste_waarde) Then
        begin
            beste_waarde := HighScore[j].Score;
            beste_j := j;
        end;
    end;    
    HighScore[beste_j] := HighScore[i];
    HighScore[i] := beste_waarde;
  end;       
end;


Ow ja, deze sorteer methode heet de 'Buble sort methode' zoek hier dus eerst maar eens op. :)

[ Voor 9% gewijzigd door Verwijderd op 22-01-2003 22:03 ]


  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
algoritme.pagina.nl

Voor al uw algoritmes :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

whoami schreef op 22 January 2003 @ 16:14:
Zeer vreemd.
Ik zie niet direct iets fout, maar waarom geef je je array als var door? Een array wordt toch zowiezo al by reference doorgegeven?
Dat hangt af van een aantal factoren. Er is net een topic over geweest waar dat wordt uitgelegt. [rml][ Delphi] Hoe wordt parameter aan procedure doorgegeven?[/rml]

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1