also hallo erstmal ,
ich haben eine Listbox mit mehreren einträgen , an die auch ein Objekt rangehänt ist , in diesem Objekt(namens TProblemSpeicher) gibt es einen Integer-Wert(namens Häufigkeit) , ich will die Einträge in der Listbox nach diesen Integer-Werten sortieren (den größten zuerst) ...
dazu hab ich in einem Delphi5 buch folgende Sortier art gefunden (die heißt Shell sort) :
************************************************** ***********
<pre>
procedure sort_shell(var a: árray of Word);
var
bis,i,j,k : Longint;
h : word;
begin
bis := high(a);
k := bis shr 1;//div 2
while k > o do begin
for i:= 0 ro bis - k do begin
j := i;
while (j >= 0) AND (a[j] > a[j + k]) do begin
h := a[j]; a[j] := a[j+k];a[j+k] = h;
if j > k then dec(j,k) else J := 0;
end
end
k := k shr 1;//div 2
end;
end;
</pre>
************************************************** ***********
da ich aber die egsamte einträge in der Listbox (String & Objekte) tauschen will habe ich das ganze ein bisschen verändert
************************************************** ************
<pre>
procedure TForm1.SuchergebnisseSortieren;
var
bis: Integer;
i : Integer;
j : Integer;
k : Integer;
begin
bis := ListBox1.Items.Count;
k := bis shr 1;//"shr 1" ist das gleiche wie "div 2"
while (k > 0) do
begin
for i := 0 to (bis - k) do
begin
j := i;
while ((j >= 0) And (TProblemSpeicher(ListBox1.Items.Objects[j]).Haufigkeit > TProblemSpeicher(ListBox1.Items.Objects[j + k]).Haufigkeit)) do//zeile A
begin
ListBox1.Items.Exchange(j,j + k);//einträge Tauschen
if (j > k) then Dec(j,k) else j := 0;
end;//while ((j> = 0) And with ListBox1 do(Haufigkeitswerteins > Haufigkeitswertzwei)) do
end;//for i := 0 to (GesamtLange - Intervallgrose) do
k := k shr 1;//"shr 1" ist das gleiche wie "div 2"
end;//while (k > 0) do
end;//procedure TsucheIWformMain.SuchergebnisseSortieren;
</pre>
************************************************** ************
wenn dich dass ganze denn aber ausführen kommt eine exception "EStrinListError : Listenindex Überschreitet Maximum(7)"
(ich habe zum Test immer 7 einträge in der Listbox)
wenn der Fehler auftrit ist Delphi immer in "zeile A"
(ich arbeite mit Delphi 7)
thy for help im vorraus
ich haben eine Listbox mit mehreren einträgen , an die auch ein Objekt rangehänt ist , in diesem Objekt(namens TProblemSpeicher) gibt es einen Integer-Wert(namens Häufigkeit) , ich will die Einträge in der Listbox nach diesen Integer-Werten sortieren (den größten zuerst) ...
dazu hab ich in einem Delphi5 buch folgende Sortier art gefunden (die heißt Shell sort) :
************************************************** ***********
<pre>
procedure sort_shell(var a: árray of Word);
var
bis,i,j,k : Longint;
h : word;
begin
bis := high(a);
k := bis shr 1;//div 2
while k > o do begin
for i:= 0 ro bis - k do begin
j := i;
while (j >= 0) AND (a[j] > a[j + k]) do begin
h := a[j]; a[j] := a[j+k];a[j+k] = h;
if j > k then dec(j,k) else J := 0;
end
end
k := k shr 1;//div 2
end;
end;
</pre>
************************************************** ***********
da ich aber die egsamte einträge in der Listbox (String & Objekte) tauschen will habe ich das ganze ein bisschen verändert
************************************************** ************
<pre>
procedure TForm1.SuchergebnisseSortieren;
var
bis: Integer;
i : Integer;
j : Integer;
k : Integer;
begin
bis := ListBox1.Items.Count;
k := bis shr 1;//"shr 1" ist das gleiche wie "div 2"
while (k > 0) do
begin
for i := 0 to (bis - k) do
begin
j := i;
while ((j >= 0) And (TProblemSpeicher(ListBox1.Items.Objects[j]).Haufigkeit > TProblemSpeicher(ListBox1.Items.Objects[j + k]).Haufigkeit)) do//zeile A
begin
ListBox1.Items.Exchange(j,j + k);//einträge Tauschen
if (j > k) then Dec(j,k) else j := 0;
end;//while ((j> = 0) And with ListBox1 do(Haufigkeitswerteins > Haufigkeitswertzwei)) do
end;//for i := 0 to (GesamtLange - Intervallgrose) do
k := k shr 1;//"shr 1" ist das gleiche wie "div 2"
end;//while (k > 0) do
end;//procedure TsucheIWformMain.SuchergebnisseSortieren;
</pre>
************************************************** ************
wenn dich dass ganze denn aber ausführen kommt eine exception "EStrinListError : Listenindex Überschreitet Maximum(7)"
(ich habe zum Test immer 7 einträge in der Listbox)
wenn der Fehler auftrit ist Delphi immer in "zeile A"
(ich arbeite mit Delphi 7)
thy for help im vorraus
Comment