Hallo,
ich hab da ein kleines Problem mit dem SelectionSort-Algorithmus. Das Tut von Daniel hab ich mir durchgelesen.
Es geht darum, folgende kleine Liste (in TListBox) zu sortieren:
Code:
100 x 100 - 256 Farben
16 x 16 - 16 Farben
48 x 48 - 256 Farben
32 x 32 - 7 Farben
16 x 16 - 256 Farben
48 x 48 - 16 Farben
32 x 32 - 16 Farben
32 x 32 - 24 bpp
16 x 16 - 24 bpp
32 x 32 - 256 Farben
48 x 48 - 24 bpp
Die Einträge sollen primär nach Bildgröße und innerhalb gleicher Größe nach Farbtiefe sortiert werden.
Mein Algo sieht bisher so aus:
Delphi-Quellcode:
function SortList(List: TStrings): TStrings;
var
i, j, min: Integer;
Buffer : string;
begin
for i := 0 to List.Count - 2 do
begin
min := 0;
for j := i + 1 to List.Count - 1 do
if StrToInt(copy(List[j], 0, Pos(' ', List[j]) - 1)) < StrToInt(copy(List[min], 0, Pos(' ', List[min]) - 1)) then min := j;
Buffer := List[i];
List[i] := List[min];
List[min] := Buffer;
end;
Result := List;
end;
(Richtig, das mit der Farbtiefe hab ich noch nicht implementiert)
Aufgerufen wird er so:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var List: TStringList;
begin
List := TStringList.Create;
List.Assign(ListBox1.Items);
Listbox1.Items.Assign(SortList(List));
end;
Der sortiert, aber nicht komplett:
- Der Eintrag mit 100 x 100 ist IMMER ganz oben, unabhängig von der Ausgangsposition
- Wenn ich mehrmals hintereinander auf die ListBox klicke wirds richtig komisch: Bei jedem zweiten Klick ist einer der 16 x 16-Einträge der letzte, bei den Klicks dazwischen tummeln sich alle 16 x 16 weiter oben auf einem Haufen.