Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ языка программирования Π‘

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

ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ Π‘-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 4 логичСски Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… области памяти. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ — это ΠΏΠ°ΠΌΡΡ‚ΡŒ, содСрТащая ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ — ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для хранСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π•Ρ‰Π΅ Π΄Π²Π΅ — это стСк ΠΈ ΠΊΡƒΡ‡Π°. Π‘Ρ‚Π΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, ΠΎΠ½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ адрСса Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠšΡƒΡ‡Π° — это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ языка программирования Π‘ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ язык поиск Π―Π·Ρ‹ΠΊ программирования Π‘ ΡΠ²Π»ΡΠ΅Ρ‚ся языком программирования срСднСго уровня. Он ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ элСмСнты языков высокого уровня с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ассСмблСра.

Как язык срСднСго уровня, Π‘ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΡ‚Π°ΠΌΠΈ, Π±Π°ΠΉΡ‚Π°ΠΌΠΈ ΠΈ Π°Π΄Ρ€Π΅ΡΠ°ΠΌΠΈ — основными элСмСнтами, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Код языка Π‘ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ пСрСносимости. Π‘ ΠΈΠΌΠ΅Π΅Ρ‚ 5 основных встроСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, это: ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ, цСлочислСнный, вСщСствСнный с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, вСщСствСнный с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ void. Π’Π°ΠΊΠΆΠ΅, Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ структуры, объСдинСния, Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля, пСрСчислСния ΠΈ Ρ‚ΠΈΠΏΡ‹, опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Как структурированный язык программирования, Π‘ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» видимости, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ структурированного языка являСтся Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Одним ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² достиТСния раздСлСния являСтся использованиС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ (Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ позволяСт Π»Π΅Π³ΠΊΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² Π‘-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ структурным ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π‘ ΡΠ²Π»ΡΠ΅Ρ‚ся функция — ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π‘. Π’ Π‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠ°ΠΌΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основаны всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Ρ‚Π΅ΠΌ самым позволяя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ.

Π”Ρ€ΡƒΠ³ΠΈΠΌ способом структуризации ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π‘ ΡΠ²Π»ΡΠ΅Ρ‚ся использованиС Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°. Π‘Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° — это Π³Ρ€ΡƒΠΏΠΏΠ° логичСски связанных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², которая воспринимаСтся ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π’ Ρ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° создаСтся ΠΏΡƒΡ‚Π΅ΠΌ помСщСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

ВсС Π‘-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТат ΠΎΠ΄Π½ΠΈ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ЕдинствСнная функция, которая всСгда Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, называСтся main (), ΠΈ ΠΎΠ½Π° яляСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ Π‘-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 4 логичСски Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… области памяти. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ — это ΠΏΠ°ΠΌΡΡ‚ΡŒ, содСрТащая ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ — ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для хранСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π•Ρ‰Π΅ Π΄Π²Π΅ — это стСк ΠΈ ΠΊΡƒΡ‡Π°. Π‘Ρ‚Π΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, ΠΎΠ½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ адрСса Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠšΡƒΡ‡Π° — это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ свободной памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для динамичСского выдСлСния памяти.

Π―Π·Ρ‹ΠΊ Π‘ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‡Π°ΡΡ‚ΡŒΡŽ написанной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, компилятор Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π΅Π΅ ΠΈΠΌΡ. ПозТС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ — ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΊΠΎΠ΄, написанный программистом, с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡƒΠΆΠ΅ находящимся Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, хранящиСся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, содСрТатся Π² ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠŸΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ использовались ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘:

stdio.h — стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, содСрТащая опрСдСлСния макросов, константы ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ стандартного Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°.

stdlib.h — стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая содСрТит Π² ΡΠ΅Π±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ процСсса выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Одной ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… являСтся поиск. Поиск — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Ρ€Π°Π½Π΅Π΅ сохранСнных Π΄Π°Π½Π½Ρ‹Ρ….

БущСствуСт Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поиска Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (списках). Рассмотрим ΠΈ ΡΡ€Π°Π²Π½ΠΈΠΌ возмоТности основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

1. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск.

2. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск.

3. Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ поиск.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива сравниваСтся с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ поиска Π½Π° ΡΠ»ΡƒΡ‡Π°ΠΉ совпадСния.

БрСдняя ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ t ΠΏΠΎΠΈΡΠΊΠ° элСмСнтов Π² ΡΠΏΠΈΡΠΊΠ΅ a[0], a[1], a[2]…a[n], ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ частота обращСния ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту списка распрСдСлСна Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚:

Π³Π΄Π΅:

n — количСство элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅;

t — срСдняя ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска (врСмя поиска).

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск прост Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, Ссли список содСрТит ΠΌΠ°Π»ΠΎ элСмСнтов.

Если ΠΆΠ΅ список нСупорядочСн, Ρ‚ΠΎ ΡΡ‚ΠΎ СдинствСнный Ρ‚ΠΈΠΏ поиска, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΉ для нахоТдСния ΠΊΠ»ΡŽΡ‡Π° Π² ΡΠΏΠΈΡΠΊΠ΅.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… массивов Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска, Ρ‡Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск.

1.1 Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска элСмСнта Π² ΠΎΡ‚сортированном массивС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅ массива Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹.

Π‘ΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сСрСдины (ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ‹) упорядочСнного списка ΠΈ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π½Π°Ρ…одится. Π—Π°Ρ‚Π΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ поиска ΡΡƒΠΆΠ°ΡŽΡ‚ΡΡ, ΠΈ ΠΊΠ»ΡŽΡ‡ ищСтся Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ способом, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°ΡŽΡ‚ся всС элСмСнты списка.

БрСдняя ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ t ΠΏΠΎΠΈΡΠΊΠ° элСмСнтов Π² ΡΠΏΠΈΡΠΊΠ΅ a[0], a[1], a[2]…a[n], ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ частота обращСния ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту списка распрСдСлСна Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚:

Π³Π΄Π΅:

n — количСство элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅;

t — срСдняя ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска (врСмя поиска).

Π’Π°ΠΊ, Ссли список содСрТит 1024 элСмСнта, Ρ‚ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для нахоТдСния ΠΊΠ»ΡŽΡ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск, Π² ΡΡ€Π΅Π΄Π½Π΅ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ 512 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ использовании Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

НСдостаток Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска являСтся Π² Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ списка Π² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ отсортированном Π²ΠΈΠ΄Π΅, Ρ‡Ρ‚ΠΎ услоТняСт Π·Π°Π΄Π°Ρ‡Ρƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ элСмСнтов ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°.

1.3 Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ поиск Алгоритм интСрполяционного поиска ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ прСдсказаниС мСстонахоТдСния элСмСнта. Поиск происходит ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌΡƒ поиску, Π½ΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΎ дСлСния области поиска Π½Π° Π΄Π²Π΅ части, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ поиск ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ†Π΅Π½ΠΊΡƒ Π½ΠΎΠ²ΠΎΠΉ области поиска ΠΏΠΎ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ элСмСнта. Если ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ K Π½Π°Ρ…одится ΠΌΠ΅ΠΆΠ΄Ρƒ Kl ΠΈ Ku, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° Ρ€Π°ΡΡΡ‚оянии ΠΎΡ‚ l (Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой числовыС значСния, Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΊ Π°Ρ€ΠΈΡ„мСтичСской прогрСссии), Π³Π΄Π΅:

K — ΠΊΠ»ΡŽΡ‡ поиска;

l — индСкс Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива (ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° массива);

u — индСкс ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива (ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° массива);

Kl — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ l;

Ku — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ u.

АсимптотичСски интСрполяционный поиск прСвосходит ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ характСристикам Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск. Π’ Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ шаг Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство провСряСмых записСй ΠΎΡ‚ Π΄ΠΎ (Π³Π΄Π΅ — количСство элСмСнтом Π² ΠΌΠ°ΡΡΠΈΠ²Π΅), Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ шаг интСрполяционного поиска ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ это количСство Π΄ΠΎ (Ссли ΠΊΠ»ΡŽΡ‡ΠΈ распрСдСлСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ интСрполяционный поиск Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π² ΡΡ€Π΅Π΄Π½Π΅ΠΌ шагов для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚ Π΄ΠΎ 2.

2. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main () ΠΈ ΠΏΡΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² main (), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹:

Β· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска f_seq_search (int *, int, int);

Β· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска f_bin_search (int *, int, int);

Β· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСрполяционного поиска f_inpol_search (int *, int, int);

Β· мСню Π²Ρ‹Π±ΠΎΡ€Π° your_choice ();

Β· сортировка массива Π΄Π°Π½Π½Ρ‹Ρ… order_arr (int *, int).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ языка Π‘, описанныС Π² Π±ΠΈΠ±ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…: ΠΈ. НиТС пСрСчислСны ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ‹ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ :

rand () — функция Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ псСвдо случайноС число Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ RAND_MAX Π½Π΅ ΠΌΠ΅Π½ΡŒΡˆΠ΅ 32 767.

atoi () — функция для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ (ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ) строки Π² Ρ‡ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ Π²ΠΈΠ΄.

malloc () — функция для выдСлСния динамичСской памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ.

free () — функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Π±Π»ΠΎΠΊ памяти, адрСсуСмый ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ :

gets () — gets (s) — функция, которая считываСт строку s ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡ… Π² ΡΠ²ΠΎΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅.

printf () — функция записываСт Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ stdout (стандартный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…) значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΡΠΎΠΎΡ‚вСтствии со ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ форматирования, адрСсуСмой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ format.

scanf () — функция для Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, которая Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ stdin ΠΈ ΡΠΎΡ…раняСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, пСрСчислСнных Π² ΡΠΏΠΈΡΠΊΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

puts () — функция, которая записываСт строку Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, добавляя Π² ΠΊΠΎΠ½Π΅Ρ† строки символ 'n', Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎΠ΅ 0 ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (EOF = -1) Π² ΡΠ»ΡƒΡ‡Π°Π΅ ошибки.

2.1 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main ()

Ѐункция main () являСтся основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

Алгоритм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1. ЗадаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π΄Π°Π½Π½Ρ‹Ρ… с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

2. ВыдСляСтся динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… массива. Если динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»Π°ΡΡŒ, Ρ‚ΠΎΠ³Π΄Π° происходит Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. Массив заполняСтся псСвдослучайными значСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rand ().

4. ВызываСтся функция сортировки order_arr (int *, int), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСдаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π°.

5.Вводится ΠΊΠ»ΡŽΡ‡ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ для поиска Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поиска.

6.УправлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ся функция мСню Π²Ρ‹Π±ΠΎΡ€Π° your_choise (), с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π² ΡΠ»ΡƒΡ‡Π°Π΅ нСобходимости, обСспСчиваСтся Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

7.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ your_choise () записываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ menu ΠΈ Π·Π°Ρ‚Π΅ΠΌ провСряСтся Π½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° switch.

8.ΠŸΡ€ΠΈ совпадСнии значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ menu с Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 1, вызываСтся функция ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ f_seq_search (int *, int, int), Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Π΄Π»ΠΈΠ½Π° массива, ΠΊΠ»ΡŽΡ‡ поиска.

9. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ res.

10. Если ΠΊΠ»ΡŽΡ‡ Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, Ρ‚ΠΎ Π½Π° ΡΠΊΡ€Π°Π½ выводится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π΅Π³ΠΎ позиция Π² ΠΌΠ°ΡΡΠΈΠ²Π΅.

11.Если ΠΊΠ»ΡŽΡ‡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡˆΠ°Π³Ρƒ Π½ΠΎΠΌΠ΅Ρ€ 6.

12. ΠŸΡ€ΠΈ совпадСнии значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ menu с Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 2, вызываСтся функция Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ f_bin_search (int *, int, int), Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Π΄Π»ΠΈΠ½Π° массива, ΠΊΠ»ΡŽΡ‡ поиска.

13.Π”Π°Π»Π΅Π΅ происходит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° совпадСния ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ дСйствиям с Π½ΠΎΠΌΠ΅Ρ€Π° 9 ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€ 11.

14.ΠŸΡ€ΠΈ совпадСнии значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ menu с Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 3, вызываСтся функция Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ f_inpol_search (int *, int, int), Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Π΄Π»ΠΈΠ½Π° массива, ΠΊΠ»ΡŽΡ‡ поиска.

15.Π”Π°Π»Π΅Π΅ происходит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° совпадСния ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ дСйствиям с Π½ΠΎΠΌΠ΅Ρ€Π° 9 ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€ 11.

16.ΠŸΡ€ΠΈ совпадСнии значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ menu с Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 4 прСдлагаСтся ввСсти Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поиска Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

17.ΠŸΡ€ΠΈ совпадСнии значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ menu с Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 5 происходит высвобоТдСниС Π±Π»ΠΎΠΊΠ° памяти, адрСсуСмым ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΊΡƒΡ‡Ρƒ, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Рисунок 1 — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

2.2 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚.ΠΊ. Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΈ ΠΈΠ½Ρ‚Срполяционный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска.

Ѐункция order_arr (int *, int) слуТит для сортировки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. Π•Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.

Рисунок 2 — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки.

Алгоритм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ order_arr (int *, int) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1.Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€.

2.Π”Π°Π»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ всС значСния массива ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

3.Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива стоящСС Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ большС Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ стоящСС Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами.

4.ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всС значСния массива Π±Ρ‹Π»ΠΈ отсортированы ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ, ΠΎΠ½ΠΈ выводятся Π½Π° ΡΠΊΡ€Π°Π½ консоли.

5.Ѐункция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

2.3 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСню Π²Ρ‹Π±ΠΎΡ€Π° Ѐункция your_choice () слуТит Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ мСню Π²Ρ‹Π±ΠΎΡ€Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ дСйствия. Π•Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.

Рисунок 3 — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСню Π²Ρ‹Π±ΠΎΡ€Π°.

Алгоритм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ your_choice () Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1. На ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ выводятся доступныС ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню.

2.Π‘ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ читаСтся Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ символ.

3.Если Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ символ находится Π²Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΎΡ‚ 1 Π΄ΠΎ 5 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡˆΠ°Π³Ρƒ Π½ΠΎΠΌΠ΅Ρ€ 2.

4. Если Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΡƒΠ½ΠΊΡ‚ мСню, Ρ‚ΠΎ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ этого ΠΏΡƒΠ½ΠΊΡ‚Π°.

2.4 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска Ѐункция f_seq_search (int *, int, int) слуТит для поиска ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска. Π•Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f_seq_search (int *, int, int) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ значСния: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΊΠ»ΡŽΡ‡ для поиска.

2. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сравниваСтся с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

3.Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Ρ†ΠΈΠΊΠ»ΠΎΠ² увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

4. ΠŸΡ€ΠΈ совпадСнии ΠΊΠ»ΡŽΡ‡Π° с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ массива, возвращаСтся Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ элСмСнта массива.

5.Если совпадСния Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Ρ‚ΠΎΠ³Π΄Π° элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1.

Рисунок 4 — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска.

2.5ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска Ѐункция f_bin_search (int *, int, int) слуТит для поиска ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска. Π•Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 5. Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f_bin_search (int *, int, int) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ значСния: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ массива минус 1, Ρ‡Ρ‚ΠΎ соотвСтствуСт послСднСму индСксу ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ элСмСнта массива, ΠΊΠ»ΡŽΡ‡ для поиска.

2.ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ². ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ сравнСниС ΠΊΠ»ΡŽΡ‡Π° с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом массива ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ.

3. Если ΠΊΠ»ΡŽΡ‡ мСньшС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, Π»ΠΈΠ±ΠΎ большС послСднСго, Ρ‚ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚, Ρ‚.ΠΊ. массив отсортирован ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. Ѐункция ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1.

4.Если ΠΊΠ»ΡŽΡ‡ ΠΏΠΎΠΏΠ°Π» Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», Ρ‚ΠΎΠ³Π΄Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ†ΠΈΠΊΠ», Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, Π² ΡΠ»ΡƒΡ‡Π°Π΅ Ссли лСвая Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится ΠΊΠ»ΡŽΡ‡, станСт Π½Π΅ ΠΌΠ΅Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ правая Π³Ρ€Π°Π½ΠΈΡ†Π°.

5.Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Ρ†ΠΈΠΊΠ»ΠΎΠ² увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

6.ВычисляСтся срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΌΠ΅Π΄ΠΈΠ°Π½Π°) ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π»Π΅ΠΆΠΈΡ‚ ΠΊΠ»ΡŽΡ‡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

Π³Π΄Π΅:

mid — ΠΌΠ΅Π΄ΠΈΠ°Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°;

first — лСвая Π³Ρ€Π°Π½ΠΈΡ†Π° (индСкс ΠΊΡ€Π°ΠΉΠ½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ элСмСнта) ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°;

last — правая Π³Ρ€Π°Π½ΠΈΡ†Π° (индСкс ΠΊΡ€Π°ΠΉΠ½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ элСмСнта) ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°.

7. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ элСмСнта Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ mid, Ρ‚ΠΎΠ³Π΄Π° сдвигаСтся правая Π³Ρ€Π°Π½ΠΈΡ†Π° last=mid.

Рисунок 5 — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

8.Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° большС значСния элСмСнта Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ mid, Ρ‚ΠΎΠ³Π΄Π° сдвигаСтся лСвая Π³Ρ€Π°Π½ΠΈΡ†Π° first=mid+1.

9.ПослС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° провСряСтся Ρ€Π°Π²Π΅Π½ Π»ΠΈ ΠΊΠ»ΡŽΡ‡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ элСмСнта Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ last.

10. Если Ρ€Π°Π²Π΅Π½, Ρ‚ΠΎΠ³Π΄Π° возвращаСтся позиция Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта.

11.Если Π½Π΅ Ρ€Π°Π²Π΅Π½, Ρ‚ΠΎΠ³Π΄Π° элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1.

2.6 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ интСрполяционного поиска Ѐункция f_inpol_search (int *, int, int) слуТит для поиска ΠΊΠ»ΡŽΡ‡Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° интСрполяционного поиска. Π•Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 6.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f_ inpol_search (int *, int, int) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1.Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ значСния: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ массива минус 1, Ρ‡Ρ‚ΠΎ соотвСтствуСт послСднСму индСксу ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ элСмСнта массива, ΠΊΠ»ΡŽΡ‡ для поиска

2.БравниваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ элСмСнта массива, находящимся Π² ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°, ΠΈ ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ элСмСнта массива, находящимся Π² ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°.

Рисунок 6 — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ интСрполяционного поиска.

3.Если ΠΊΠ»ΡŽΡ‡ мСньшС большС Π»Π΅Π²ΠΎΠ³ΠΎ элСмСнта ΠΈ ΠΌΠ΅Π½ΡŒΡˆΠ΅ Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π΅Π½ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ элСмСнту, Ρ‚ΠΎΠ³Π΄Π° счСтчик Ρ†ΠΈΠΊΠ»ΠΎΠ² увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

4.ВычисляСтся позиция ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта для сравнСния Π΅Π³ΠΎ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

Π³Π΄Π΅:

mid — позиция элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ;

key — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°;

first — лСвая Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°;

last — правая Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°;

arr[last] - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π² ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°;

arr[first] - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π² Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°.

5.Π”Π°Π»Π΅Π΅ провСряСтся, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ mid мСньшС значСния ΠΊΠ»ΡŽΡ‡Π°, Ρ‚ΠΎ Π»Π΅Π²Π°Ρ Π³Ρ€Π°Π½ΠΈΡ†Π° сдвигаСтся: fist = mid+1.

6.ДСйствиС Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡˆΠ°Π³ 2.

7.Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ mid Π½Π΅ ΠΌΠ΅Π½ΡŒΡˆΠ΅ значСния ΠΊΠ»ΡŽΡ‡Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ся Ссли ΠΎΠ½ΠΎ большС.

8.Если Π½Π΅Ρ‚, Ρ‚ΠΎΠ³Π΄Π° функция ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся позиция mid, Ρ‚.ΠΊ. key=arr[mid].

9.Если Π΄Π°, Ρ‚ΠΎΠ³Π΄Π° сдвигаСтся правая Π³Ρ€Π°Π½ΠΈΡ†Π° Π½Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° last = mid -1.

10.ДСйствиС Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡˆΠ°Π³ 2.

11. ПослС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, провСряСтся Ρ€Π°Π²Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π° ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°, находящСгося Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ first.

12.Если равСнство Π²Π΅Ρ€Π½ΠΎ, Ρ‚ΠΎΠ³Π΄Π° функция ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся позиция элСмСнта.

13. Π˜Π½Π°Ρ‡Π΅, функция ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1.

3. БравнСния возмоТностСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ поиска Для сравнСния возмоТностСй поиска сформируСм массивы Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Π΅ΠΌ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ², Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ поиска. Для этого объявим Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ cnt ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° сравнСния, Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ cnt Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Для поиска возьмСм Ρ‚Ρ€ΠΈ числа, стоящих Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ, срСднСй, послСднСй позициях.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈ поискС числа находящСгося Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, прСдставлСн Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈ поискС числа находящСгося Π½Π° ΡΡ€Π΅Π΄Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, прСдставлСн Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈ поискС числа, находящСгося Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, прСдставлСн Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3.

Π’Π°Π±Π»ΠΈΡ†Π° 1 — Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ числа*

Π’Π°Π±Π»ΠΈΡ†Π° 2 — Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для срСднСго числа*

Π’Π°Π±Π»ΠΈΡ†Π° 3 — Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для послСднСго числа*

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° поиска Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…:

1. Алгоритм ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска.

2. Алгоритм Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

3. Алгоритм интСрполяционного поиска.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² поиска ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ своими достоинствами ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠ°ΠΌΠΈ.

Π’Π°ΠΊ, ΠΏΡ€ΠΈ использовании ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска, трСбуСтся ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ для поиска Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ элСмСнта, Ссли ищСтся элСмСнт Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… списках. Если ΠΆΠ΅ искомого элСмСнта Π½Π΅Ρ‚ Π² ΡΠΏΠΈΡΠΊΠ΅, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ поиска прост Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сортировки массива. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли список Π½Π΅ ΠΎΡ‚сортирован, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск — СдинствСнный способ ΠΎΡ‚Ρ‹ΡΠΊΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ элСмСнт.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСвосходит ΠΏΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ… Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отсортированы ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Ρ‹. Π­Ρ‚ΠΎ услоТняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ элСмСнтов.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ поиск схоТ с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ поиском. Π•ΠΌΡƒ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ массив Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π» структурированным. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ эффСктивный поиск ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ значСния Π΄Π°Π½Π½Ρ‹Ρ… распрСдСлСны Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ. Однако ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ экспСримСнты ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ интСрполяционный поиск Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ сниТаСт количСство выполняСмых сравнСний, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний врСмя. Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ примСняСтся Π½Π° Ρ€Π°Π½Π½ΠΈΡ… стадиях поиска Π² Π±ΠΎΠ»ΡŒΡˆΠΎΠΌ внСшнСм Ρ„Π°ΠΉΠ»Π΅; послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ поиска сущСствСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ, слСдуСт ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌΡƒ поиску.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π²ΠΈΠ΄ поиска Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

1. Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚ Π¨ΠΈΠ»Π΄. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Borland C++. Мн.: ООО «ΠŸΠΎΠΏΡƒΡ€Ρ€ΠΈ», 1999. — 800с.

2. ΠžΡΠ½ΠΎΠ²Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π―Π·Ρ‹ΠΊ БИ. Π•. М. Π”Π΅ΠΌΠΈΠ΄ΠΎΠ²ΠΈΡ‡.Мн.: «Π‘Сстпринт» 2003 Π³.

3. ИспользованиС Visual C++ 6. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. Π“Ρ€Π΅Π³ΠΎΡ€ΠΈ К.: ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π».-М.;БПб.;К.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2001.-864 с.

4. Π”ΠΎΠ½Π°Π»ΡŒΠ΄ Π­Ρ€Π²ΠΈΠ½ ΠšΠ½ΡƒΡ‚. Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования, Ρ‚ΠΎΠΌ 3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠΎΠΈΡΠΊ, 2-Π΅ ΠΈΠ·Π΄. М.: ООО «Π˜.Π”. Π’ΠΈΠ»ΡŒΡΠΌΡ», 2007. — 832с.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

#include

#include

int your_choice (void);//мСню Π²Ρ‹Π±ΠΎΡ€Π°

void order_arr (int *arr, int size);//сортировка ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

int f_seq_search (int *arr, int size, int key);//функция ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска

int f_bin_search (int *arr, int last, int key);//функция Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска

int f_inpol_search (int *arr, int last, int key);//функция интСрполяционного поиска

int cnt;//счСтчик Ρ†ΠΈΠΊΠ»ΠΎΠ² (для сравнСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поиска)

int main (void)

{

int *p=NULL, n, input, i;//n-число элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅

int res, menu;//p-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для Π΄ΠΈΠ½Π°ΠΌ. массива

//input-для элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ

//res-для записи Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° поиска, menu-Π²Ρ‹Π±ΠΎΡ€ дСйствия

puts («Enter the size of your array:»);

scanf («%d» ,&n);//Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

p=(int *)malloc (n*sizeof (int));//выдСляСм ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

if (!p)

{

puts («the dynamic memory is not allocated»); // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π²Ρ‹Π΄Π΅Π»ΠΈΠ»Π°ΡΡŒ Π»ΠΈ //ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ массив

return 1;//Ссли Π½Π΅Ρ‚, Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

}

for (i=0;i

{

*(p+i)=rand ()%20 000;//заполняСм массив случайныйми элСмСнтами ΠΎΡ‚ 0 //Π΄ΠΎ 20 000

printf («%d «,*(p+i));//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ массив Π½Π° ΡΠΊΡ€Π°Π½

}

printf («n»);

order_arr (p, n);//сортировка массива

puts («Enter the value for search:»);

scanf («%d», &input); //Π²Π²ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ)

for (;;)//Ρ†ΠΈΠΊΠ» Π½Π΅ ΠΏΡ€Π΅Ρ€Π²Π΅Ρ€Ρ‚ся, ΠΏΠΎΠΊΠ° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ся условиС menu=5

{

menu=your_choice ();//Π²Ρ‹Π±ΠΎΡ€ дСйствия

switch (menu)

{

case 1:

res=f_seq_search (p, n, input); //фунция ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска //элСмСнта

if (res==-1)//Ссли искомоС число Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅

{

puts («There is no match»);

printf («The count of your cycle is: %d n», cnt);

break;//Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° switch ()

}

puts (««);

puts («The result of your search is:»);

printf («the value %d at position %d n», input, res+1);

printf («The count of your cycle is: %d n», cnt);

//Ссли Π΅ΡΡ‚ΡŒ совпадСниС, Ρ‚ΠΎ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ Π½Π° ΡΠΊΡ€Π°Π½ искомый элСмСнт //ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅

break;//Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° switch ()

case 2:

res=f_bin_search (p, n-1,input);//функция Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска

if (res==-1)

{

puts («There is no match»);

printf («The count of your cycle is: %d n», cnt);

break;

}

puts (««);

puts («The result of your search is:»);

printf («the value %d at position %d n», input, res+1);

printf («The count of your cycle is: %d n», cnt);

break;

case 3:

res=f_inpol_search (p, n-1, input);//функция интСрполяционного //поиска

if (res==-1)

{

puts («There is no match»);

printf («The count of your cycle is: %d n», cnt);

break;

}

puts (««);

puts («The result of your search is:»);

printf («the value %d at position %d n», input, res+1);

printf («The count of your cycle is: %d n», cnt);

break;

case 4:

puts (««);

puts («Enter the new value for search:»);

scanf («%d», &input);//ввСсти Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поиска

break;

case 5:

free (p);

return 0;//Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

}

}

}

void order_arr (int *arr, int size)

{

int i, j, temp;

for (i=0;i

for (j=0;j

{

if (arr[j]>arr[i]) //Ссли Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС Ρ‚ΠΎΠ³ΠΎ, с //ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ сравниваСм

{

temp=arr[j]; //Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΌΠ΅ΡΡ‚Π°ΠΌΠΈ

arr[j]=arr[i];

arr[i]=temp;

}

}

puts («The array is order by asc»);

for (i=0;i

printf («%d «,*(arr+i));

printf («n»);

}

int f_seq_search (int *arr, int size, int key)

{

int i;

cnt=0;

for (i=0;i

{

cnt++;

if (arr[i]==key)//сравниваСмаСм ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡ‰Π΅ΠΌ

{

return (i);//Ссли Π΅ΡΡ‚ΡŒ совпадСниС, Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ значСния //Π² массивС

}

}

return -1;

}

int f_bin_search (int *arr, int last, int key)

{

int mid, first=0;//mid-срСдняя позиция Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, first — лСвая Π³Ρ€Π°Π½ΠΈΡ†Π° //массива,

//last — правая Π³Ρ€Π°Π½ΠΈΡ†Π° массива

cnt=0;

if (keyarr[last])//Ρ‚.ΠΊ. массив отсортирован ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ, Ρ‚ΠΎ Π² //случаС Ссли искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

{//мСньшС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива ΠΈΠ»ΠΈ большС послСднСго, Ρ‚ΠΎ //совпаданий Π½Π΅Ρ‚

return -1;

}

while (last>first)//условиС нахоТдСния элСмСнта Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, Ρ‚.ΠΊ. Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ //постоянно ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ

{

cnt++;

mid=first+(last-first)/2;//срСдняя (Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ) позиция массива

if (key<=arr[mid])//Ссли искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π΄Π°Π»Π΅Π΅ — ΠΊΠ»ΡŽΡ‡) мСньшС ΠΈΠ»ΠΈ //Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, находящСгося Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ

last=mid;//Ρ‚ΠΎ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΏΡ€Π°Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

else first=mid+1;//ΠΈΠ½Π°Ρ‡Π΅ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π»Π΅Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

} //Π²Ρ‹Ρ…ΠΎΠ΄ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ last==first

if (arr[last]==key)//Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ last Ρ€Π°Π²Π½ΠΎ искомому ΠΊΠ»ΡŽΡ‡Ρƒ, Ρ‚ΠΎ //Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ

return (last);//last (ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π°). МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ first,

//Ρ‚.ΠΊ. firs==last

else

return -1; //Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ -1

}

//int f_inpol_search (int *arr, int last, int key)

{

int first = 0, mid;//Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, mid — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΡ†Π΅Π½ΠΊΠΈ (Π»ΠΈΠ±ΠΎ //Π»Π΅Π²ΠΎΠΉ, Π»ΠΈΠ±ΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹)

cnt=0;

while (arr[first]=key)//условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°: ΠΊΠ»ΡŽΡ‡ //Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ ΠΈ ΠΏΡ€Π°Π²ΠΎΠΉ

{

cnt++;

mid=first+((key-arr[first])*(last-first))/(arr[last]-arr[first]);

//Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° расчСта ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹

if (arr[mid]

first=mid+1;//сдвигаСм Π»Π΅Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

else if (arr[mid]>key)

last=mid-1;//сдвигаСм ΠΏΡ€Π°Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

else return mid;//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π°

}

if (arr[first]==key)//Ссли Ρ†ΠΈΠΊΠ» Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· //Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт (Π»ΠΈΠ±ΠΎ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ) Ρ€Π°Π²Π΅Π½ ΠΊΠ»ΡŽΡ‡Ρƒ

return first;//Ссли Π΄Π°, Ρ‚ΠΎ Π²Π΅Ρ€Π½Π΅ΠΌ first

else

return -1; //ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

}

int your_choice (void)//мСню Π²Ρ‹Π±ΠΎΡ€Π°

{

char s[80];

int c;

puts (««);

puts («1. Function of sequential search»);

puts («2. Function of binary search»);

puts («3. Function of interpolation search»);

puts («4. Enter the new value for search»);

puts («5. Quit»);

printf («The c is %dn», c);

gets (s);

puts (s);

c=atoi (s);//ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ строку Π² Ρ‡ΠΈΡΠ»ΠΎ

printf («value of c out of the do-while cycle is: %dn», c);

do

{

puts («Enter your choise (1,2,3,4,5):»);

gets (s);//Π²Π²ΠΎΠ΄ΠΈΠΌ наш Π²Ρ‹Π±ΠΎΡ€ (строку)

puts (s);

c=atoi (s);//ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ строку Π² Ρ‡ΠΈΡΠ»ΠΎ

printf («value of c into the do-while cycle is: %dn», c);

}

while (c<1||c>5);//ΠΏΠΎΠΊΠ° Π½Π΅ Π²Π²Π΅Π΄Π΅ΠΌ 1 ΠΈΠ»ΠΈ 2 ΠΈΠ»ΠΈ 3 ΠΈΠ»ΠΈ 4 ΠΈΠ»ΠΈ 5 ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π½Π΅ //Π²Ρ‹ΠΉΠ΄Π΅ΠΌ

puts (««);

return c;

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° скомпилируСм Ρ„Π°ΠΉΠ» ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

количСство элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ — 16;

искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — 6500;

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поиска, Π½Π°Π΄ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€Ρƒ 4.

Для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€Ρƒ 5.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 7 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска.

Рисунок 7 — использованиС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 8 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

Рисунок 8 — использованиС Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 9 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС интСрполяционной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Рисунок 9 — использованиС интСрполяционной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска.

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