ΠΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π½Π΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½, Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ: Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΈΡΠΊΠΎΠΌΡΠΌ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΠ»Π° For. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 42 Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈΠ· 100 ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»:
var
MyArray : array[0..99] of integer;
Inx : integer;
begin
for Inx := 0 to 99 do
if MyArray[Inx] = 42 then
Break;
if (Inx = 100) then
.. Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 42 Π½Π΅ Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ..
else
.. Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 42 Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Inx ..
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, Π½Π΅ ΠΏΡΠ°Π²Π΄Π° Π»ΠΈ? ΠΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΈΠΊΠ» ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Break Π΄Π»Ρ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΠΈΠΊΠ»Π° ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π²Π½ΠΎ ΠΈΡΠΊΠΎΠΌΠΎΠΌΡ 42. (ΠΠΏΠ΅ΡΠ°ΡΠΎΡ Break ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π·Π΄Π΅ΡΡ ΠΎΠ½ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° goto.) ΠΠΎΡΠ»Π΅ ΡΠΈΠΊΠ»Π°, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π°ΠΉΠ΄Π΅Π½ Π»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠΈΠΊΠ»Π° Inx.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΊΠΎΠ΄Π΅ Π½Π°ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ? ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΡΠ·ΡΠΊΠ΅ Object Pascal ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π°, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Break, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ.
Π ΠΊΠΎΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π΅Π½Π½Π°Ρ ΡΠΈΠΊΠ»Π° Inx ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ Π½Π° 1 Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΈΠΊΠ»Π° For, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΈΠΊΠ» Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π² 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ (Π² Π²Π΅ΡΡΠΈΡΡ Delphi ΠΎΡ 2 Π΄ΠΎ 7) ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΊΠ»Π° ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ Π½Π° 1 Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π°. Π Delphi 1 ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ: ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ ΡΠ²ΠΎΠ΅ΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π° (Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Inx ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ 99). ΠΡΠΎ Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Delphi? ΠΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Delphi Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΊΠ»Π° ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΎΠΏΠΈΡΠ°Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΊΠ»Π°, ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠ°Π²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΠΈΠΊΠ»Π°.
Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°? Π¦ΠΈΠΊΠ» For ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (ΡΡΠΎ ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π²Π΅ΡΡΠΈ ΡΠ»Π°Π³, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, Π½Π°ΠΉΠ΄Π΅Π½ Π»ΠΈ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡΡ, Π½ΠΎ Π·Π°ΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
var
MyArray : array[0..99] of integer;
Inx : integer;
FoundIt : boolean;
begin
FoundIt := false;
for Inx := 0 to 99 do
if MyArray[Inx] = 42 then begin
FoundIt := true;
Break;
end;
if not FoundIt then
.. Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 42 Π½Π΅ Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ..
else
.. Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 42 Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Inx ..
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ TList Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ (Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ TDTList.pas Π½Π° Web-ΡΠ°ΠΉΡΠ΅ ΠΈΠ·Π΄Π°ΡΠ΅Π»ΡΡΡΠ²Π°, Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ²). ΠΡΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ 4.5. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² Π½Π΅ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ TList
function TDTListIndexOf(aList : TList; aItem : pointer;
aCompare : TtdCompareFunc) : integer;
var
Inx : integer;
begin
for Inx := 0 to pred(aList.Count) do
if (aCompare(aList.List^[Inx], aItem) = 0) then begin
Result := Inx;
Exit;
end;
{Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΠ°Π»ΠΈ ΡΡΠ΄Π°, Π·Π½Π°ΡΠΈΡ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½}
Result := -1;
end;
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄ TList.IndexOf, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΡΡΠ΅ΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ½ Π² ΡΠ²ΠΎΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠ½ΠΊΡΠΈΡ TDTListIndexOf ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π²ΡΠ·ΡΠ²Π°Ρ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΏΡΠΎΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π²ΠΎ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΠΎΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»Ρ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΠ΅Π»ΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ Ρ ΠΈΡΡΠΎΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ aItem Ρ aList[Inx] Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ aList.List^[Inx]. ΠΠ°ΡΠ΅ΠΌ? ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π² Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, TList.Get, ΠΏΠ΅ΡΠ΅Π΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ· Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΅ΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ 0 Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (Π²ΡΠ·ΡΠ²Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π΅ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ). ΠΠΎ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠΊΠ» ΠΎΡ 0 Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΈΠ½ΡΡ 1. ΠΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Items ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ TList.Get. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ (ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ List ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° TList).
-----
ΠΡΠ° Ρ ΠΈΡΡΠΎΡΡΡ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° List ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° TList) Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°. ΠΡΠ»ΠΈ Π²Ρ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π΅ Π²ΡΡ ΠΎΠ΄ΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π° ΡΡΠ΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ ListItems. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ TList ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²ΡΡ ΠΎΠ΄Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π½Π΅ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΡΡΠ΅ ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡΡ ΡΠ΅Π±Ρ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΏΠΎΡΠΎΠΌ ΡΠΎΠΆΠ°Π»Π΅ΡΡ.
-----
Π ΠΊΠ»Π°ΡΡΠ΅ TtdRecordList (ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ Π² Π³Π»Π°Π²Π΅ 2) Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ IndexOf (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 4.6).
ΠΠΈΡΡΠΈΠ½Π³ 4.6. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° TtdRecordList.IndexOf
function TtdRecordList.IndexOf(aItem : pointer;
aCompare : TtdCompareFunc) : integer;
var
ElementPtr : PAnsiChar;
i : integer;
begin
ElementPtr := FArray;
for i := 0 to pred(Count) do begin
if (aCompare(aItem, ElementPtr) = 0) then begin
Result := i;
Exit;
end;
inc(ElementPtr, FElementSize);
end;
Result := -1;
end;
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π°ΠΏΡΡΠΌΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π Π»ΡΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅), Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ Π΅Π³ΠΎ Π² ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π ΡΡΠ΅Π΄Π½Π΅ΠΌ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ n Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΠΉΡΠΈ n/2 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, Π±ΡΠ΄ΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½Ρ Π²ΡΠ΅ n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊ ΠΊΠ»Π°ΡΡΡ O(n).
Π ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅? ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, - ΠΏΡΠΎΡΡΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½ΠΈΡΡΡΡ Π½Π΅ Ρ ΡΠΆΠ΅ (ΠΈΠ»ΠΈ Π½Π΅ Π»ΡΡΡΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ), ΡΠ΅ΠΌ Π² Π½Π΅ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ O(n).
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ. ΠΡΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΏΠΎΠΈΡΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π±ΠΎΠ»ΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΡΠΉ ΠΈΡΠΊΠΎΠΌΠΎΠΌΡ. ΠΡΠ»ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ°Π²Π½ΡΠΉ ΠΈΡΠΊΠΎΠΌΠΎΠΌΡ, ΠΏΠΎΠΈΡΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ, Π·Π½Π°ΡΠΈΡ, ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ°ΡΡΠΈΠ² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½, Π° ΠΌΡ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ, ΡΠ΅ΠΌ ΠΈΡΠΊΠΎΠΌΡΠΉ. ΠΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΠΈΡΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ.
ΠΠΈΡΡΠΈΠ½Π³ 4.7. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ TList
function TDTListSortedIndexOf(aList : TList; aItem : pointer;
aCompare : TtdCompareFunc) : integer;
var
Inx, CompareResult : integer;
begin
{ΠΈΡΠΊΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ aItem}
for Inx := 0 to pred(aList.Count) do begin
CompareResult := aCompare(aList.List^[Inx], aItem);
if (CompareResult >= 0) then begin
if (CompareResult = 0) then
Result := Inx
else
Result := -1;
Exit;
end;
end;
{Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΠ°Π»ΠΈ ΡΡΠ΄Π°, Π·Π½Π°ΡΠΈΡ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½}
Result := -1;
end;
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π°. ΠΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ aCompare - Π΄Π»Ρ Π½Π°Ρ ΡΡΠΎ "ΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΈΠΊ". Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΅Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΆΠ΅. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΅Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π·, Π½Π΅ Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ (Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½Π΅Π΅, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ n/2 ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ). ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π΅Π΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ Π±ΡΡΡΡΠ΅Π΅. Π‘ΠΊΠΎΡΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠΎΠ²ΡΡΠΈΡΡ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ .
Π‘Π²ΡΠ·Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ
Π ΡΠ²ΡΠ·Π½ΡΡ ΡΠΏΠΈΡΠΊΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ . Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡΡΡ Π½Π΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π° ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Next. ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠ° TtdSingleLinkList, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² Π³Π»Π°Π²Π΅ 3, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π²Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ: ΠΏΠ΅ΡΠ²Π°Ρ - Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π½Π΅ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΠ²ΡΠ·Π½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ, ΠΈ Π²ΡΠΎΡΠ°Ρ - ΠΏΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, Π½Π°ΠΉΠ΄Π΅Π½ Π»ΠΈ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°ΠΉΠ΄Π΅Π½, ΡΠΏΠΈΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. Π ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΊΡΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΡΠ°Π²Π°Π»ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.