AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Bubbesort

Ein Thema von Luckie · begonnen am 24. Mai 2003 · letzter Beitrag vom 24. Mai 2003
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Problem mit Bubbesort

  Alt 24. Mai 2003, 16:27
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:
aa
bb
cc
dd
dd
dd
Ich benutze die Implementation von Daniel aus der Tutorialsparte.
Delphi-Quellcode:
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;
Ich sitze schon den ganzen Tag davor und finde den Fehler nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2
  Alt 24. Mai 2003, 16:48
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:
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;
Ich habe ja fast den verdacht, dass Deine Wrapperklasse da irgendwo einen Index durcheinanderbringt.
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 24. Mai 2003, 16:50
Den Verdacht hab eich auch, dass ich den Fehler an der falschen Stelle suche.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 24. Mai 2003, 17:35
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz