In der zweiten Spalte der ListView stehen nur Zahlen und danach möchte ich die Einträge sortiert haben. Der gute alte Bubble Sort funktioniert da zwar perfekt, ist aber viel zu langsam. Wer hat ne schnellere Lösung? Gibt es sowas wie CompareText nur für Integer halt?
Mein jetziger Code:
Code:
ListView1.Items.BeginUpdate;
ListView1.Items.Add;
For x:=ListView1.Items.Count-2 downto 0 do
For y:=0 to x do
If StrtoInt(ListView1.Items.Item[x].SubItems.Strings[0])<StrtoInt(ListView1.Items.Item[y].SubItems.Strings[0])
then
begin
ListView1.Items.Item[ListView1.Items.Count-1]:=ListView1.Items.Item[x];
ListView1.Items.Item[x]:=ListView1.Items.Item[y];
ListView1.Items.Item[y]:=ListView1.Items.Item[ListView1.Items.Count-1];
end;
ListView1.Items.Delete(ListView1.Items.Count-1);
ListView1.Items.EndUpdate;
Als ShellSort auf Basis von Daniels Code aus dem Tutorial gehts zwar schon schneller, aber zufrieden kann man damit trotzdem nicht sein.
Code:
ListView1.Items.BeginUpdate;
ListView1.Items.Add;
h:=1;
Repeat
h:=(3*h)+1;
Until (h>ListView1.Items.Count-1);
Repeat
h:=(h div 3);
For i:=(h+1) To ListView1.Items.Count-1 Do
Begin
ListView1.Items.Item[listView1.Items.Count-1]:=ListView1.Items.Item[i-1];
j:=i;
While ((j>h) and (StrtoInt(ListView1.Items.Item[j-h-1].SubItems.Strings[0])>StrtoInt(ListView1.Items.Item[listView1.Items.Count-1].SubItems.Strings[0]))) Do
Begin
ListView1.Items.Item[j-1]:=ListView1.Items.Item[j-h-1];
dec(j,h);
End;
ListView1.Items.Item[j-1]:=ListView1.Items.Item[listView1.Items.Count-1];
End;
Until (h=1);
ListView1.Items.Delete(ListView1.Items.Count-1);
ListView1.Items.EndUpdate;
Gruß