Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ
ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² Π³Π»Π°Π²Π΅ 4. Π’Π°ΠΊ, ΠΏΠΎΠΈΡΠΊ Π² Π½Π΅ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ n, Π³Π΄Π΅ n-ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π Π³Π»Π°Π²Π΅ 4 ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π½Π΅ ΠΏΠΎΠ»Π½ΡΠΌ, Π±Π΅Π· ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ², Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΡΡΠΎΡΡΡΡ ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅ «ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ», ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡΠ΅ΠΉ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄Π²ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π·Π°Π΄Π°ΡΡ Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°. Π§Π°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° «ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ» ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ» ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π² Π³Π»Π°Π²Π΅ 4. Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° «ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ» — Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ°Π΄Π°ΡΠ° 6.4 ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅: ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ a[] ΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° left (Π»Π΅Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π°) Π΄ΠΎ right (ΠΏΡΠ°Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π°) Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ. Π ΠΌΠ΅ΡΠΎΠ΄Π΅ Π΄Π²Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°Π΄Π°ΡΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π² ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ. ΠΠ΅ΡΠ΅Π²ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° max () Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° a={5, 10, 12, 8} ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π° ΡΠΈΡ. 6.4.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° ΡΠΊΡΠ°Π½. Π ΠΌΠ΅ΡΠΎΠ΄Π΅ println () ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄toString () ΠΊΠ»Π°ΡΡΠ° java.util.Arrays, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π² ΡΡΡΠΎΠΊΡ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°:
- 1. ΠΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ left ΡΠ°Π²Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡΡ right, ΡΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° a[left], ΠΈΠ½Π°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏ.2−3.
- 2. ΠΠΎΠ΄Π΅Π»ΠΈΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ. ΠΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ left ΠΈ (left+right)/2 ΠΈ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ (left+right)/2+1 ΠΈ right. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠΎΠ² ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ temp1 ΠΈ temp2 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
- 3. ΠΠ΅ΡΠ½ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ· Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² temp1 ΠΈ temp2.
public class Ex6_4.
{.
static int max (int[] a).
{.
return max (a, 0, a. length-1); }.
static int max (int[] a, int left, int right).
{.
if (left==right) return a[left];
else {.
int temp1= max (a, left,(left+right)/2);
int temp2= max (a,(left+right)/2+1,right);
returnMath.max (temp1,temp2);}.
}.
public static void main (String[] args).
{.
int[] a = {5,0,-10,9,15,100,-12,3};
System.out.println (java.util.Arrays.toString (a));
System.out.println («Max="+max (a));
}}.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
[5, 0, -10, 9, 15, 100, -12, 3].
Max=100.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ «ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ» — ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½ΠΎΠ³ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠ΄Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ, ΡΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ° (ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ) ΡΠΎ ΡΡΠ΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ±ΡΠΎΡΠΈΡΡ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΎ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠΎΡ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, Π΅ΡΠ»ΠΈ — Π±ΠΎΠ»ΡΡΠ΅, ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Π±ΡΠ΄Π΅Ρ Π΄Π²Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²Π°.
ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² Π³Π»Π°Π²Π΅ 4. Π’Π°ΠΊ, ΠΏΠΎΠΈΡΠΊ Π² Π½Π΅ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ n, Π³Π΄Π΅ n-ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ .
ΠΠ°Π΄Π°ΡΠ° 6.5 ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅: Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: ΠΌΠ°ΡΡΠΈΠ² a[], left — ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (Π»Π΅Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ°), right — ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (ΠΏΡΠ°Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ°), middle — ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, key — ΠΊΠ»ΡΡ ΠΏΠΎΠΈΡΠΊΠ° (ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ). ΠΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΊΠ»ΡΡΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ -1. Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, Π½ΠΎΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠΎ ΠΈΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ -1.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°:
- 1. ΠΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ left Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° right, ΡΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ -1, ΠΈΠ½Π°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏ.2−4.
- 2. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°: middle=(left+right)/2.
- 3. Π‘ΡΠ°Π²Π½ΠΈΡΡ ΠΊΠ»ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎ ΡΡΠ΅Π΄Π½ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, ΡΠΎ ΠΏΠΎΠΈΡΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° — middle, ΠΈΠ½Π°ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ² Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΏΠΎΠΈΡΠΊ. ΠΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏ. 4.
- 4. ΠΡΠ»ΠΈ ΠΊΠ»ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅Π½ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π²ΡΠ·Π²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ left ΠΈ middle-1, ΠΈΠ½Π°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ middle+1 ΠΈ right.
public class Ex6_5.
{.
static int binarySearch (int[] a, int left, int right, int key).
{.
if (left>right) return -1;
else.
{.
int middle=(left+right)/2;
if (key==a[middle]) return middle;