Π‘ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠ²ΡΠ·Π°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ°ΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ, Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΄Π»Ρ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π²ΡΠ±ΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· n - 1 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°Π»Π΅Π΅ Π΄Π»Ρ ΡΡΠ΅ΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ n - 2 ΠΈ Ρ.Π΄. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΈΡ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΉΡΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΊΠ°ΠΊ n! (n! ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ n ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΠΈ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ n * (n- 1) * (n-2) *...* 1.)
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅: Π΅ΡΠ»ΠΈ Π½Π΅ Π±ΡΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° n = 1, n(^n^) Π±ΠΎΠ»ΡΡΠ΅, Π° ΡΠ°ΡΡΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ n! Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΎΡΠΌΠΈΡΡΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ ΡΠ°ΡΠ΅, Π½Π΅ΠΆΠ΅Π»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ n(^n^) Π½Π΅ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° n! Π±Π΅Π· ΠΎΡΡΠ°ΡΠΊΠ°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ°ΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠΎΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ: Π±ΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ Π²ΡΠ΅Ρ n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π²ΡΠΎΡΠΎΠΉ - ΠΈΠ· ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ (n - 1) ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Ρ.Π΄. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π³Π΄Π΅ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΈΠΊΠ» Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ°, Π° Π½Π΅ Ρ Π½Π°ΡΠ°Π»Π° ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠΈΡΡΠΈΠ½Π³ 5.3. ΠΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° TList
procedure TDListShuffle(aList : TList; aStart, aEnd : integer);
var
Range : integer;
Inx : integer;
RandomInx : integer;
TempPtr : pointer;
begin
TDValidateListRange(aList, aStart, aEnd, 'TDListShuffle');
{Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΡΠΈΡΠ°Ρ ΡΠΏΡΠ°Π²Π°...}
for Inx := (aEnd - aStart) downto aStart + 1 do
begin
{ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ aStart Π΄ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°}
RandomInx := aStart + Random(Inx-aStart+ 1);
{Π΅ΡΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ ΡΠ°Π²Π΅Π½ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ, ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ}
if (RandomInx <> Inx) then begin
TempPtr := aList.List^[Inx];
aList.List^[Inx] := aList.List^[RandomInx];
aList.List^ [RandomInx] TempPtr;
end;
end;
end;
ΠΡΠ½ΠΎΠ²Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ
ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° Π΄Π²Π° ΡΠΈΠΏΠ°: ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠ΅ ΠΈ Π½Π΅ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠ΅. Π ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π² Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°Π²Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π±ΡΠ»ΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π² Π½Π°Π±ΠΎΡΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ°Π²Π½ΠΎ 42 (Ρ.Π΅. ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°Π²Π½Ρ). ΠΡΡΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 12, ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π - Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 234, Π° Π‘ - Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 3456. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π, Π, Π‘, Ρ.Π΅. ΠΈΡ Π²Π·Π°ΠΈΠΌΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π½Π΅ΡΡΡΠΎΠΉΡΠΈΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΡΠ°Π²Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π, Π ΠΈ Π‘ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π, Π, Π‘, ΠΈΠ»ΠΈ Π‘, Π, Π, ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π£ΡΡΠΎΠΉΡΠΈΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ²Π°Π΅Ρ Π½ΡΠΆΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π°ΠΌ Π½Π΅ΡΠ΅Π³ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡ ΠΎΠ± ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Ρ ΡΠ΅Π»ΡΡ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ»ΠΎΠ΄Ρ ΠΊΠ°ΡΡ. ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈ ΠΈΠ· ΠΊΠΎΠ»ΠΎΠ΄Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΡΠΉΡΠ΅ ΠΈΡ (ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ 13 ΠΊΠ°ΡΡΠ°ΠΌΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ).
Π‘Π°ΠΌΡΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ
ΠΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΈΡ Π½Π° ΡΡΠΈ Π³ΡΡΠΏΠΏΡ. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅ ΠΎΡΠ½Π΅ΡΠ΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΊ ΠΊΠ»Π°ΡΡΡ O(n(^2^)), Ρ ΠΎΡΡ ΠΏΠ°ΡΠΎΡΠΊΠ° ΠΈΠ· Π½ΠΈΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΠ΅ΡΠ²ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ Π°Π·ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, - ΡΡΠΎ ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° (bubble sort). ΠΠ°ΠΊ ΡΡΠΎ Π½ΠΈ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ, Π½ΠΎ ΠΈΠ· Π²ΡΠ΅Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ. Π₯ΠΎΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Π΅ Π»Π΅Π³ΡΠ΅ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ (Ρ ΠΎΡΡ ΠΈ Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ).
Π ΠΈΡΡΠ½ΠΎΠΊ 5.1. ΠΠ΄ΠΈΠ½ ΠΏΡΠΎΡ ΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ
ΠΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π Π°Π·Π»ΠΎΠΆΠΈΡΠ΅ Π²Π°ΡΠΈ ΠΊΠ°ΡΡΡ (ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΈΡ Π²ΡΠ΅Π³ΠΎ 13?). ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΡΡ ΠΈ ΡΡΠΈΠ½Π°Π΄ΡΠ°ΡΡΡ ΠΊΠ°ΡΡΡ. ΠΡΠ»ΠΈ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠ°Ρ ΠΊΠ°ΡΡΠ° ΡΡΠ°ΡΡΠ΅ ΡΡΠΈΠ½Π°Π΄ΡΠ°ΡΠΎΠΉ, ΠΏΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΈΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ ΠΎΠ΄ΠΈΠ½Π½Π°Π΄ΡΠ°ΡΠΎΠΉ ΠΈ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠΎΠΉ ΠΊΠ°ΡΡΠ°ΠΌ. ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½Π½Π°Π΄ΡΠ°ΡΠ°Ρ ΠΊΠ°ΡΡΠ° ΡΡΠ°ΡΡΠ΅ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠΎΠΉ, ΠΏΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΈΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. Π’ΠΎ ΠΆΠ΅ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΠΈ Π΄Π»Ρ ΠΏΠ°Ρ (10, 11), (9, 10) ΠΈ Ρ.Π΄., ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ°ΡΡΡ. ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΏΠΎ Π²ΡΠ΅ΠΉ ΠΊΠΎΠ»ΠΎΠ΄Π΅ ΡΡΠ· ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ "Π·Π°ΡΠ΅ΠΏΠΈΠ»ΠΈΡΡ" Π·Π° ΡΡΠ· ΠΎΠ½ "Π²ΡΠΏΠ»ΡΠ»" Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. Π’Π΅ΠΏΠ΅ΡΡ Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠΎΠΉ ΠΈ ΡΡΠΈΠ½Π°Π΄ΡΠ°ΡΠΎΠΉ ΠΊΠ°ΡΡΠ°ΠΌ. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ, Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ²ΡΠΈΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΠΈ ΡΡΠ΅ΡΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ°Ρ . ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π΄Π²ΠΎΠΉΠΊΡ Π½Π° Π²ΡΠΎΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΌΠ΅Π½ΡΡΠ°Ρ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π½ΠΎΠ²ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ ΠΊΠ°ΡΡ ΠΈ ΠΏΠΎΡΡΡΠΏΠ°Ρ ΡΠ°ΠΊ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²ΡΡ ΠΊΠΎΠ»ΠΎΠ΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π°.
ΠΠΎΠ»Π°Π³Π°Π΅ΠΌ, Π²Ρ ΡΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ»Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ-ΡΠ°ΠΊΠΈ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ. ΠΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Pascal "ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ" Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ ΡΠ°Π±ΠΎΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ: Π΅ΡΠ»ΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄Π° Π½Π΅ Π±ΡΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, Π·Π½Π°ΡΠΈΡ, ΠΊΠ°ΡΡΡ ΡΠΆΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΈΡΡΠΈΠ½Π³ 5.4. ΠΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
procedure TDBubbleSort(aList : TList;
aFirst : integer;
aLast : integer;
aCompare : TtdCompareFunc);
var
i, j : integer;
Temp : pointer;
Done : boolean;
begin
TDValidateListRange(aList, aFirst, aLast, 'TDBubbleSort');
for i := aFirst to pred(aLast) do
begin
Done := true;
for j := aLast downto succ ( i ) do
if (aCompare(aList.List^[j], aList.List^ ) < 0) then begin
{ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²ΠΈΡΡ j-ΡΠΉ ΠΈ (j - 1)-ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ}
Temp := aList.List^ [ j ];
aList.List^[j] := aList.List^[j-1];
aList.List^[j-1] :=Temp;
Done := false;
end;
if Done then
Exit;
end;
end;
ΠΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ ΠΊΠ»Π°ΡΡΠ° O(n(^2^)). ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π΄Π²Π° ΡΠΈΠΊΠ»Π°: Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ n - 1 ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, ΠΏΡΠΈ Π²ΡΠΎΡΠΎΠΌ β n - 2, ΠΏΡΠΈ ΡΡΠ΅ΡΡΠ΅ΠΌ β n - 3 ΠΈ Ρ.Π΄. ΠΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ n - 1 ΡΠ°ΠΊΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ², ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ ΡΠΎΡΡΠ°Π²ΠΈΡ:
(n-1) + (n-2)+... + 1
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΡΡΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ Π΄ΠΎ n (n - 1)/2 ΠΈΠ»ΠΈ (n(^2^) - n)/2. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ O(n(^2^)). ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ (ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π±ΡΠ»ΠΈ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅) ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, Ρ.Π΅. ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ O(n(^2^)).
ΠΠ΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΡΡΡΡ Π²ΡΡΠ΅, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ ΡΠΆΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ: Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ, Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ, (n -1) ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π² Π»ΡΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°Π²Π½ΠΎ O(n).
ΠΠ΄Π½Π° Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ, Π΄Π° ΠΈ ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ, ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π΄Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠ°, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ.
ΠΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΡΠ°Π²Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ΅ΡΠ²ΡΠΌ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π΄Π°Π»ΡΡΠ΅ ΠΎΡ Π½Π°ΡΠ°Π»Π°. ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π½Π° "ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΌ" ΠΈΠ»ΠΈ "ΡΠ°Π²Π΅Π½", Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ "ΠΌΠ΅Π½ΡΡΠ΅", ΡΠΎΠ³Π΄Π° ΠΏΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ°Π½Π΅Ρ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠΉ, Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡΡ, ΠΈ Π²Π²Π΅Π΄Π΅Π½Π½Π°Ρ Π½Π°ΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π΄Π°ΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΈΠ³ΡΡΡΠ° Π² ΡΠΊΠΎΡΠΎΡΡΠΈ.
Π¨Π΅ΠΉΠΊΠ΅Ρ-ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΡΠ·ΡΡΡΠΊΠΎΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½Ρ ΠΌΠ°Π»ΠΎΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π²Π°ΡΠΈΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π΄Π°Π΅Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ, - ΡΡΠΎ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΡΠ΅ΠΉΠΊΠ΅Ρ-ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° (shaker sort).
Π ΠΈΡΡΠ½ΠΎΠΊ 5.2. ΠΠ²Π° ΠΏΡΠΎΡ ΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΉΠΊΠ΅Ρ-ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΊΠ°ΡΡΠ°ΠΌ. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΡ ΠΎΠ΄ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π’ΡΠ· ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. Π’Π΅ΠΏΠ΅ΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΊΠΎΠ»ΠΎΠ΄Ρ ΠΊΠ°ΡΡ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ, ΠΏΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ: ΡΡΠ°Π²Π½ΠΈΡΠ΅ Π²ΡΠΎΡΡΡ ΠΈ ΡΡΠ΅ΡΡΡ ΠΊΠ°ΡΡΡ ΠΈ ΡΡΠ°ΡΡΡΡ ΠΊΠ°ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΡΠ΅ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΡΠ΅ΡΡΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΡΡ ΠΊΠ°ΡΡΡ, ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΈΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠ°ΡΡ (12, 13). ΠΠΎ ΠΏΡΡΠΈ ΠΊ ΠΏΡΠ°Π²ΠΎΠΌΡ ΠΊΡΠ°Ρ ΠΊΠΎΠ»ΠΎΠ΄Ρ Π²Ρ "Π·Π°Ρ Π²Π°ΡΠΈΠ»ΠΈ" ΠΊΠΎΡΠΎΠ»Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ½ΠΎΠ²Π° ΠΏΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ΄Ρ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ Π΄ΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ°ΡΡΡ. ΠΠΎ Π²ΡΠΎΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π΄Π²ΠΎΠΉΠΊΠ°. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π΄ΠΎΠ²Π°ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΎΠ² Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π° Π²ΡΡ ΠΊΠΎΠ»ΠΎΠ΄Π°.