Der Testcode ist ziemlich hässlich und mit heißer Nadel gestrickt, aber gut:
Delphi-Quellcode:
const
c = 500000;
begin
Tree := TABTree.Create;
t0 := GetTickCount64();
for i := 1 to c do
Tree.Insert(i,i);
for i := 2*c downto c+1 do
Tree.Insert(i,i);
t1 := GetTickCount64();
for i := 1 to c do
Tree.Locate(i);
for i := 2*c downto c+1 do
Tree.Locate(i);
t2 := GetTickCount64();
for i := c - c div 2 to c do
Tree.Remove(i);
for i := c + c div 2 downto c do
Tree.Remove(i);
t3 := GetTickCount64;
for i := c - c div 2 to c do
Tree.Insert(i,i);
for i := c + c div 2 downto c do
Tree.Insert(i,i);
t4 := GetTickCount64;
Memo1.Append(Format('B+ %d Inserts: %d', [2*c, t1-t0]));
Memo1.Append(Format('B+ %d Locates: %d', [2*c, t2-t1]));
Memo1.Append(Format('B+ %d Removes: %d', [c, t3-t2]));
Memo1.Append(Format('B+ %d Reinserts: %d', [c, t4-t3]));
Tree.Free;
Analog sieht er für die anderen Datenstrukturen aus.
Also es werden immer zur Hälfte aufsteigend und zur Hälfte absteigend Daten eingefügt, gesucht, gelöscht etc.