Π”ΠΈΠΏΠ»ΠΎΠΌ, курсовая, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°
ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚

РСкурсивный поиск Π² массивах

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска, рассмотрСнного Π² Π³Π»Π°Π²Π΅ 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;

elseif (key

return binarySearch (a, left, middle-1, key);

else.

return binarySearch (a, middle+1, right, key);

}.

}.

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.printf («Search (9) index=%d», binarySearch (a, 0, a. length-1,9));

}.

}.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

[5, 0, -10, 9, 15, 100, -12, 3].

Search (9) index=3.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ