![]() |
Problem mit Bubbesort
So, ich habe für meine Datnebank einen Bubbelsort implementiert. Nur irgendwie macht er nicht so ganz, dass was er soll. Er sortiert nur bis zu Hälfte (Wenn er es tut. Die ersten datensätze sind noch sortiert.), und ab der Hälfte sind dann alle Datensätze identisch. Also so sieht das dann aus:
Zitat:
Delphi-Quellcode:
Ich sitze schon den ganzen Tag davor und finde den Fehler nicht.
procedure SwapIt(Record1, Record2: Trecord);
var TempRecord: Trecord; begin TempRecord := Record1; Record1 := Record2; Record2 := TempRecord; end; procedure Sort; var MyTypedFile : TTypedFile; Record1, Record2 : TRecord; s, s1, s2: String; i, j: Integer; begin MyTypedFile := TTypedFile.Create(CutFilename(ParamStr(0))+'\'+DATAFILENAME); try for i := MyTypedFile.GetRecordsCount-1 downto 1 do begin for j := 2 to i do begin Record1 := MyTypedFile.GetRecord(j-1); Record2 := MyTypedFile.GetRecord(j); s1 := CreateLVCaption(j-1); s2 := CreateLVCaption(j); if s1 > s2 then begin SwapIt(Record1, Record2); MyTypedFile.ModifyRecord(Record1, j-1); MyTypedFile.ModifyRecord(Record2, j); end; s := Format('Datensätze werden sortiert: %d ...', [i]); SendDlgItemMessage(hApp, IDC_STATBAR, SB_SETTEXT, 1, Integer(@s[1])); ProcessMessages(hApp); end; end; finally MyTypedFile.Free; s := ''; SendDlgItemMessage(hApp, IDC_STATBAR, SB_SETTEXT, 1, Integer(@s[1])); end; end; |
Hallo Luckie,
ich sitze gerade leider nicht am richtigen Rechner, aber vielleicht solltest Du das Problem in zwei Teile teilen. Das Grundgerüst des Bubblesort sieht ja wie folgt aus:
Delphi-Quellcode:
Ich habe ja fast den verdacht, dass Deine Wrapperklasse da irgendwo einen Index durcheinanderbringt.
Procedure BubbleSort;
var i,j : Integer; Begin For i:= N downto 1 Do For j:= 1 To i Do If (Data[j-1] > Data[j]) Then SwapValues( j-1, j ); End; Wenn ich am richtige PC bin, schaue ich mir mal Deinen Code an, aber so allgemein würde ich erstmal raten, die Vertauschungen in beispielsweise einem Memo zu loggen, so dass Du Schritt für Schritt siehst, was da vertauscht wird. |
Den Verdacht hab eich auch, dass ich den Fehler an der falschen Stelle suche.
|
Ok. Habs gefunden. In meinem Wrapper hat alles gestimmt, ich habe ihn nur falsch angewendet.
Delphi-Quellcode:
procedure Sort;
var MyTypedFile : TTypedFile; Record1, Record2 : TRecord; s, s1, s2: String; i, j: Integer; begin MyTypedFile := TTypedFile.Create(CutFilename(ParamStr(0))+'\'+DATAFILENAME); try for i := MyTypedFile.GetRecordsCount-1 downto 1 do begin for j := 2 to i do begin Record1 := MyTypedFile.GetRecord(j-1); Record2 := MyTypedFile.GetRecord(j); s1 := CreateLVCaption(j-1); s2 := CreateLVCaption(j); if s1 > s2 then begin SwapIt(Record1, Record2); MyTypedFile.ModifyRecord(Record1, Record2.Index); MyTypedFile.ModifyRecord(Record2, Record1.Index); end; s := Format('Datensätze werden sortiert: %d ...', [i]); SendDlgItemMessage(hApp, IDC_STATBAR, SB_SETTEXT, 1, Integer(@s[1])); ProcessMessages(hApp); end; end; finally MyTypedFile.Free; s := ''; SendDlgItemMessage(hApp, IDC_STATBAR, SB_SETTEXT, 1, Integer(@s[1])); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz