Π Π°Π±ΠΎΡ‚Π° с массивами Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых частых Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ. Но Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ программисты ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ нюансами ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ наличия элСмСнта Π² массивС. НапримСр, ΠΏΠΎΡ‡Π΅ΠΌΡƒ функция Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ НСопрСдСлСно вмСсто Π›ΠΎΠΆΡŒ? Или ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС структур, Π³Π΄Π΅ сравнСниС происходит Π½Π΅ ΠΏΠΎ ссылкС, Π° ΠΏΠΎ содСрТимому?

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ 5 основных способов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” ΠΎΡ‚ стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π΄ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ самый быстрый, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с NULL ΠΈ НСопрСдСлСно, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ вмСсто встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° протСстированы Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: сравним ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π° массивах Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΡ‚ 10 Π΄ΠΎ 100 000 элСмСнтов. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ β€” Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° справочника Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ поиск Π΄ΡƒΠ±Π»Π΅ΠΉ Π² рСгистрС свСдСний.

πŸ“Š Какой способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ массивов Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Ѐункция Найти()
Π¦ΠΈΠΊΠ» ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ
ΠœΠ΅Ρ‚ΠΎΠ΄ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…()
ИндСкс()
Π‘Π²ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

1. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: функция Найти()

Ѐункция Найти() β€” самый ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ способ. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс элСмСнта, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΈΠ»ΠΈ НСопрСдСлСно, Ссли элСмСнт отсутствуСт. Π­Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ логичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π˜ΡΡ‚ΠΈΠ½Π°/Π›ΠΎΠΆΡŒ.

Основной синтаксис:

ИндСкс = Массив.Найти(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ² = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Молоко");

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π₯Π»Π΅Π±");

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π―ΠΉΡ†Π°");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ° = ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Найти("Π₯Π»Π΅Π±");

Если Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ° <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ: " + Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ°);

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½");

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π’Π°ΠΆΠ½Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Найти():

  • πŸ” Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ происходит ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π° Π½Π΅ ΠΏΠΎ ссылкС (ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π³Π΄Π΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ссылки)
  • ⚠️ Если Π² массивС Π΅ΡΡ‚ΡŒ NULL ΠΈΠ»ΠΈ НСопрСдСлСно, ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ
  • ⏱️ Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹: O(n) β€” Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск, нСэффСктивСн для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов (>1000 элСмСнтов)
πŸ’‘

Для поиска NULL Π² массивС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Массив.Найти(Π’ΠΈΠΏ("NULL")) β€” это СдинствСнный Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ отсутствиС элСмСнта ΠΎΡ‚ наличия пустого значСния.

2. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΌΠ΅Ρ‚ΠΎΠ΄ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…()

ΠœΠ΅Ρ‚ΠΎΠ΄ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…() провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ элСмСнта Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π˜ΡΡ‚ΠΈΠ½Π°/Π›ΠΎΠΆΡŒ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Найти(), ΠΎΠ½ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ элСмСнта, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для простых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

Бинтаксис:

ΠŸΡ€ΠΈΠ·Π½Π°ΠΊΠΠ°Π»ΠΈΡ‡ΠΈΡ = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с Найти():

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Найти() Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…()
Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ИндСкс ΠΈΠ»ΠΈ НСопрСдСлСно Π˜ΡΡ‚ΠΈΠ½Π°/Π›ΠΎΠΆΡŒ
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ O(n) O(n)
Π Π°Π±ΠΎΡ‚Π° с NULL Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚
Удобство для условий Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠŸΡ€ΡΠΌΠΎΠ΅ использованиС Π² Если

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…():

  • βœ… НуТно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅, Π±Π΅Π· получСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ
  • βœ… Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с массивами, содСрТащими NULL
  • βœ… ΠŸΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ для условий (Если Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°...)
ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…() ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах?

На самом Π΄Π΅Π»Π΅ ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π°ΡΠΈΠΌΠΏΡ‚ΠΎΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n), Π½ΠΎ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…() выполняСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ NULL, Ρ‡Ρ‚ΠΎ добавляСт ~10-15% Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… (тСсты Π½Π° массивах 50 000+ элСмСнтов).

3. Поиск Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ

Π ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ (ΠΈΠ»ΠΈ Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ) Π΄Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом поиска. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ:

  • πŸ”§ Π˜ΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ слоТному ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, частичноС совпадСниС строк)
  • πŸ“Š ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько условий ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
  • πŸ”„ ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ поиск досрочно ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ:

НайдСн = Π›ΠΎΠΆΡŒ;

Для ИндСкс = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если Массив[ИндСкс] = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

НайдСн = Π˜ΡΡ‚ΠΈΠ½Π°;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с Для КаТдого (быстрСС для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²):

НайдСн = Π›ΠΎΠΆΡŒ;

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

НайдСн = Π˜ΡΡ‚ΠΈΠ½Π°;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Искомая Π»ΠΎΠ³ΠΈΠΊΠ° слоТнСС простого сравнСния|НуТно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСсколько условий Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅|Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с массивом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Для КаТдого эффСктивнСС)|ВрСбуСтся досрочноС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ элСмСнта-->

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (>10 000 элСмСнтов) Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ встроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΠ·-Π·Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС 1Π‘.

4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ ИндСкс()

ΠœΠ΅Ρ‚ΠΎΠ΄ ИндСкс() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ элСмСнта (начиная с 0) ΠΈΠ»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасным для использования Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях β€” самым ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.

БСзопасный способ использования:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Массив.ИндСкс(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸš€ Π‘Π°ΠΌΡ‹ΠΉ быстрый ΠΈΠ· встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Π½Π° 5-10% быстрСС Найти())
  • ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
  • πŸ”— ПолСзСн, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Π° ΠΈΠΌΠ΅Π½Π½ΠΎ позиция элСмСнта для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ скорости ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° массивС 10 000 элСмСнтов (тСсты Π½Π° 1Π‘ 8.3.20):

ΠœΠ΅Ρ‚ΠΎΠ΄ ВрСмя выполнСния (мс) ΠŸΠ°ΠΌΡΡ‚ΡŒ (Кб)
ИндСкс() 12 48
Найти() 14 52
Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…() 15 50
Π¦ΠΈΠΊΠ» Для КаТдого 38 64

5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов

Когда Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 10 000 элСмСнтов, стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ становятся нСэффСктивными. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ:

Π°) ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ сортировка + Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск

// Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ массив ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·

Массив.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ();

// Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠΠ°ΠΉΡ‚ΠΈΠ”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠŸΠΎΠΈΡΠΊΠΎΠΌ(Массив, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

Π±) ИспользованиС БоотвСтствия для частых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ

Π‘ΠΎΠΎΡ‚Π² = Новый БоотвСтствиС;

Для КаТдого Π­Π»Π΅ΠΌ Из Массив Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌ, Π˜ΡΡ‚ΠΈΠ½Π°);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ O(1)

ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ = Π‘ΠΎΠΎΡ‚Π².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

Π²) Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° подмассивы (для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ):

РазмСрЧасти = 1000;

Для НомСрЧасти = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°()/РазмСрЧасти Π¦ΠΈΠΊΠ»

Подмассив = Массив.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(НомСрЧасти*РазмСрЧасти, РазмСрЧасти);

Если Подмассив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) Π’ΠΎΠ³Π΄Π°

// Нашли Π² этой части

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

πŸ’‘

Для массивов >50 000 элСмСнтов ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ созданиС БоотвСтствия ускоряСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² 10-50 Ρ€Π°Π·, despite увСличСния расхода памяти.

6. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Π² 1Π‘. Π’ΠΎΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС:

Ошибка 1: ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ НСопрСдСлСно ΠΈ NULL

// ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

Если Массив.Найти(NULL) = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

// Π­Ρ‚ΠΎ сработаСт ΠΈ ΠΊΠΎΠ³Π΄Π° NULL Π΅ΡΡ‚ΡŒ Π² массивС, ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅Ρ‚!

// ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Массив.Найти(NULL)) = Π’ΠΈΠΏ("NULL") Π’ΠΎΠ³Π΄Π°

// Π’ΡƒΡ‚ ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ провСряСм Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ NULL

Ошибка 2: Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ

// НС сработаСт для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ссылки):

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…(Новый Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠžΠ±ΡŠΠ΅ΠΊΡ‚.НомСнклатура)

// НуТно ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ свойству:

Для КаТдого ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Из ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π¦ΠΈΠΊΠ»

Если ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Бсылка = Π˜ΡΠΊΠΎΠΌΠ°ΡΠ‘ΡΡ‹Π»ΠΊΠ° Π’ΠΎΠ³Π΄Π°

// Нашли

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Ошибка 3: ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ массива Π²ΠΎ врСмя поиска

// ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ нСпрСдсказуСмому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ:

Для ИндСкс = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если УсловиС Π’ΠΎΠ³Π΄Π°

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(ИндСкс); // Опасно!

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

πŸ’‘

Для бСзопасного удалСния элСмСнтов Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с ΠΊΠΎΠ½Ρ†Π°: Для ИндСкс = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() По 0 Π¦ΠΈΠΊΠ»

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ вСрсиях 1Π‘ 8.3.18 ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅ измСнилось ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Найти() для массивов с Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈΡΡ значСниями β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ индСкс, Π° Π½Π΅ послСдний, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ Ρ€Π°Π½Π΅Π΅.

7. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡

Π—Π°Π΄Π°Ρ‡Π° 1: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΡƒΠ±Π»Π΅ΠΉ Π² справочникС

Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° = Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ.НомСнклатура.Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ();

МассивНаимСнований = Новый Массив;

Пока Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ() Π¦ΠΈΠΊΠ»

Если МассивНаимСнований.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.НаимСнованиС) Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π”ΡƒΠ±Π»ΡŒ Π½Π°ΠΉΠ΄Π΅Π½: " + Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.НаимСнованиС);

Π˜Π½Π°Ρ‡Π΅

МассивНаимСнований.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.НаимСнованиС);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π—Π°Π΄Π°Ρ‡Π° 2: Поиск Π² массивС структур

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Код,НаимСнованиС", "001", "Π’ΠΎΠ²Π°Ρ€1"));

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Код,НаимСнованиС", "002", "Π’ΠΎΠ²Π°Ρ€2"));

// Поиск по нСскольким полям

НайдСн = Π›ΠΎΠΆΡŒ;

Для КаТдого Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Из ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ Π¦ΠΈΠΊΠ»

Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Код = "002" И Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.НаимСнованиС = "Π’ΠΎΠ²Π°Ρ€2" Π’ΠΎΠ³Π΄Π°

НайдСн = Π˜ΡΡ‚ΠΈΠ½Π°;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π—Π°Π΄Π°Ρ‡Π° 3: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° с большим массивом Π΄Π°Π½Π½Ρ‹Ρ…

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ соотвСтствиС для быстрого поиска

Π‘ΠΎΠΎΡ‚Π²ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ΠΎΠ² = Новый БоотвСтствиС;

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π—Π°ΠΏΡ€ΠΎΡΠ° Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΡ‚Π²ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ΠΎΠ².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°.ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚.Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉΠ˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€(), Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

// Π—Π°Ρ‚Π΅ΠΌ провСряСм Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π·Π° O(1)

Если Π‘ΠΎΠΎΡ‚Π²ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ΠΎΠ².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚.Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉΠ˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€()) Π’ΠΎΠ³Π΄Π°

// ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

FAQ: ЧастыС вопросы ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ массивов Π² 1Π‘

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ элСмСнта Π² массивС, Ссли Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ НСопрСдСлСно?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

Если НС Массив.Найти(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ случаи, ΠΊΠΎΠ³Π΄Π° сам элСмСнт Ρ€Π°Π²Π΅Π½ НСопрСдСлСно)

Π˜Π½Π°Ρ‡Π΅

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Для явной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° НСопрСдСлСно ΠΊΠ°ΠΊ элСмСнт массива:

ИндСкс = Массив.Найти(НСопрСдСлСно);

Если ИндСкс <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

// Π’ массивС Π΅ΡΡ‚ΡŒ элСмСнт НСопрСдСлСно

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ самый быстрый для массива ΠΈΠ· 100 000 элСмСнтов?

Для ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” ИндСкс() с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ БоотвСтствиС ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚() для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ (O(1))

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π‘ΠΎΠΎΡ‚Π² = Новый БоотвСтствиС;

Для КаТдого Π­Π»Π΅ΠΌ Из Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉΠœΠ°ΡΡΠΈΠ² Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌ, Π˜ΡΡ‚ΠΈΠ½Π°);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

// Π”Π°Π»Π΅Π΅ провСряСм Π·Π° константноС врСмя:

ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ = Π‘ΠΎΠΎΡ‚Π².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚);

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Найти() для поиска Π² массивС массивов?

Π”Π°, Π½ΠΎ сравнСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ ссылкС, Π° Π½Π΅ ΠΏΠΎ содСрТимому. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

МассивМассивов = Новый Массив;

Подмассив1 = Новый Массив; Подмассив1.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1);

Подмассив2 = Новый Массив; Подмассив2.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1);

МассивМассивов.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Подмассив1);

// Π­Ρ‚ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ Подмассив2, Π΄Π°ΠΆΠ΅ Ссли содСрТимоС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = МассивМассивов.Найти(Подмассив2); // Π’Π΅Ρ€Π½Π΅Ρ‚ НСопрСдСлСно

Для поиска ΠΏΠΎ содСрТимому Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ собствСнный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сравнСния массивов.

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° массива содСрТат ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

Ѐункция ΠœΠ°ΡΡΠΈΠ²Ρ‹Π Π°Π²Π½Ρ‹(Массив1, Массив2)

Если Массив1.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() <> Массив2.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΆΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π‘ΠΎΠΎΡ‚Π² = Новый БоотвСтствиС;

Для КаТдого Π­Π»Π΅ΠΌ Из Массив1 Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌ, Π‘ΠΎΠΎΡ‚Π².ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ());

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Для КаТдого Π­Π»Π΅ΠΌ Из Массив2 Π¦ΠΈΠΊΠ»

Если НС Π‘ΠΎΠΎΡ‚Π².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(Π­Π»Π΅ΠΌ) Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΆΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π˜ΡΡ‚ΠΈΠ½Π°;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Найти() ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0 вмСсто НСопрСдСлСно?

Π­Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π°:

  1. Π˜ΡΠΊΠΎΠΌΡ‹ΠΉ элСмСнт находится Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 0 Π² массивС
  2. Π’Ρ‹ ΠΏΡƒΡ‚Π°Π΅Ρ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с логичСским Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Массив.Найти(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

Если ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ 0)

Π˜Π½Π°Ρ‡Π΅

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;