Π Π°Π±ΠΎΡ‚Π° с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ просто чтСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ Π΅Ρ‘ динамичСского измСнСния. Одной ΠΈΠ· частых Π·Π°Π΄Π°Ρ‡, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок слСдования записСй Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° Π’Π°Π±Π»ΠΈΡ†Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ слоТных ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ², ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… для Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Drag-and-Drop.

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Π·Π°Π΄Π°Ρ‡Π° каТСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ: Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ элСмСнт с индСксом А ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π‘. Однако, Ссли ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Β«Π² Π»ΠΎΠ±Β», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартныС Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ массивы, ΠΌΠΎΠΆΠ½ΠΎ сущСствСнно ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы, особСнно ΠΊΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° содСрТит тысячи строк. ПониманиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ спСциализированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ элСгантно ΠΈ быстро.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ пСрСстановки строк, рассмотрим встроСнныС возмоТности ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ошибкам выполнСния ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌΡƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ….

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ структуры Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ манипуляциям с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π’Π°Π±Π»ΠΈΡ†Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Π½Π΅ просто массив структур, Π° спСциализированный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для хранСния ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… записСй с фиксированным Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. КаТдая строка Π² Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ свой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ числовой индСкс, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с нуля.

Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ массивами, Π³Π΄Π΅ часто практикуСтся swap-опСрация (ΠΎΠ±ΠΌΠ΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…). Π’ контСкстС 1Π‘ ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ссылками Π½Π° строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π² Π’Π°Π±Π»ΠΈΡ†Π΅ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ начинаСтся с 0, Π° Π½Π΅ с 1. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ индСксу (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ послСднСму элСмСнту, считая Π΅Π³ΠΎ Ρ€Π°Π²Π½Ρ‹ΠΌ количСству строк) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС выполнСния.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки ΠΈ удалСния Π² сСрСдину Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΠΎΠ»Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠΎ рСсурсам, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ваша Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ частой пСрСсортировки большого объСма Π΄Π°Π½Π½Ρ‹Ρ…, стоит Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎΠ± использовании Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ сортировкС Ρ‡Π΅Ρ€Π΅Π· запрос, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… вашСй Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

πŸ’‘

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ (Π±ΠΎΠ»Π΅Π΅ 10 000 строк) ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ пСрСмСщСния строк Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΊΠΎΠΏΠΈΡ‚ΡŒ список ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сортировку.

Алгоритм пСрСмСщСния строки Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ

Π‘Π°ΠΌΡ‹ΠΉ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок строк β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ встроСн Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Он ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сдвиг индСксов всСх ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… элСмСнтов.

Бинтаксис ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ указания Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: индСкса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠΉ строки ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ индСкса, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эта строка Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ установлСна. Если Π½ΠΎΠ²Ρ‹ΠΉ индСкс большС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, строка сдвигаСтся Π²Π½ΠΈΠ·, «пСрСпрыгивая» Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ записи. Если мСньшС β€” строка поднимаСтся Π²Π²Π΅Ρ€Ρ….

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² самый ΠΊΠΎΠ½Π΅Ρ†:

Π’Π— = Новый Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;

//.. Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ..

Π‘Ρ‚Π°Ρ€Ρ‹ΠΉΠ˜Π½Π΄Π΅ΠΊΡ = 0;

ΠΠΎΠ²Ρ‹ΠΉΠ˜Π½Π΄Π΅ΠΊΡ = Π’Π—.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1;

Π’Π—.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ(Π‘Ρ‚Π°Ρ€Ρ‹ΠΉΠ˜Π½Π΄Π΅ΠΊΡ, ΠΠΎΠ²Ρ‹ΠΉΠ˜Π½Π΄Π΅ΠΊΡ);

ИспользованиС этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для хранСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ строки Π·Π°Π½ΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ связСй ΠΈΠ»ΠΈ ссылочных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

πŸ’‘

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ() являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ для измСнСния порядка строк ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ удалСния ΠΈ вставки.

ОбмСн мСстами Π΄Π²ΡƒΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… строк

Часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ просто ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ строку, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄Π²Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ записи, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строку с индСксом 5 ΠΈ строку с индСксом 10. ΠŸΡ€ΡΠΌΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π² ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ΄Π½ΠΎΠΉ строкой-источником.

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

Алгоритм дСйствий выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • πŸ“Œ ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ссылку Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ().
  • πŸ“Œ ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ссылку Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ строку Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.
  • πŸ“Œ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ структуру для сохранСния содСрТимого, Ссли прямоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ сдвига.

Π‘ΠΎΠ»Π΅Π΅ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π²ΡƒΡ… сосСдних ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… строк Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пСрСмСщСния с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ измСнСния индСксов послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ шага. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ строку А Π½Π° мСсто Π‘, индСкс строки Π‘ (ΠΈ всСх ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ) измСнится. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² расчСтах.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ПослС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ() индСксы строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Если Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΠ±ΠΌΠ΅Π½Π°, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ пСрСсчитайтС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ индСкс Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки, ΠΈΠ½Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Π΅ встанут Π½Π΅ Ρ‚ΡƒΠ΄Π°.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ нСльзя просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΏΠΎΠ»Π΅ΠΉ?

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ (Π’Π—[0].ПолС1 = Π’Π—[1].ПолС1) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Если Π² ячСйкС хранится ссылка Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, массив ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, простоС присваиваниС скопируСт ссылку, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ нСпрСдсказуСмому повСдСнию ΠΏΡ€ΠΈ дальнСйшСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΈ массовой пСрСсортировкС

Π’ сцСнариях, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠΎ слоТному ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ срСдствами ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ цикличСскому ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ строк. Π­Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивный ΠΏΡƒΡ‚ΡŒ.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок строк, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ»ΠΈ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ записи ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ добавлСния строки Π² ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ()) выполняСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ вставка Π² сСрСдину ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… записСй.

Рассмотрим сравнСниС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅:

ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠ΅ использованиС
Π’Π—.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ() Высокая (O(N)) Π•Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ измСнСния порядка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ
Π’Π—.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() Низкая (O(N log N)) Массовая сортировка ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ
Новая Π’Π— + Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ() БрСдняя (O(N)) БлоТная Π»ΠΎΠ³ΠΈΠΊΠ° Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

ИспользованиС встроСнного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() всСгда ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Π΅Π΅ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ пСрСмСщСния, Ссли ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ упорядочивания ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан Ρ‡Π΅Ρ€Π΅Π· имя ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сортировки. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ этот процСсс Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ сортировки Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Π’Π—.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ()
Π ΡƒΡ‡Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ» с ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ()
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· Запрос

Π Π°Π±ΠΎΡ‚Π° с индСксами Π² Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ…

ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ строки мСстами ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Β«Π’Π²Π΅Ρ€Ρ…Β» ΠΈ Β«Π’Π½ΠΈΠ·Β», критичСски Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ условия. Ошибка Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту.

Випичная ошибка Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ строку с индСксом 0 Π΅Ρ‰Π΅ Π²Ρ‹ΡˆΠ΅ (Π½Π° индСкс -1) ΠΈΠ»ΠΈ послСднюю строку Π΅Ρ‰Π΅ Π½ΠΈΠΆΠ΅. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пСрСмСщСния всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ индСкс строки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Ρ€Π°Π½ΠΈΡ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ… 1Π‘ индСкс строки Π² Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (Π’Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ΠŸΠΎΠ»Π΅) ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с индСксом Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° сортировка ΠΈΠ»ΠΈ ΠΎΡ‚Π±ΠΎΡ€. ВсСгда ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ строку ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ ΠΏΠΎ индСксу Ρ„ΠΎΡ€ΠΌΡ‹.

Для бСзопасной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пСрСмСщСния Π²Π²Π΅Ρ€Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ:

  • πŸ”Ό ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ > 0.
  • πŸ”Ό Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π’Π—.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ, Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ - 1).
  • πŸ”Ό ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ строку Π² Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ курсор остался Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΌ элСмСнтС.

Аналогично для пСрСмСщСния Π²Π½ΠΈΠ· провСряСтся условиС Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ < Π’Π—.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ послС пСрСмСщСния строки Π΅Ρ‘ Π½ΠΎΠ²Ρ‹ΠΉ индСкс измСнится, ΠΈ Ссли Π²Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ индСкс Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ строки

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

ЧастыС ошибки ΠΈ способы ΠΈΡ… устранСния

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

Иногда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ() Ρƒ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ поля Ρ„ΠΎΡ€ΠΌΡ‹ послС измСнСния структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²ΠΈΠ΄ΠΈΡ‚ ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ обновлСния экрана.

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ выдСлСния. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ строки фокус Π²Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Ρ‚Π΅Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, послС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пСрСмСщСния слСдуСт явно ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ строку Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ поля Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ индСкс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ записи.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с интСрфСйсом ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ ΠΈ Ρ‚ΠΈΠΏΠ° Ρ„ΠΎΡ€ΠΌΡ‹ (управляСмая ΠΈΠ»ΠΈ обычная). Π’ управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… происходит асинхронно, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого внимания ΠΊ порядку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² обновлСния.

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

πŸ’‘

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ пСрСмСщСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ 1Π‘ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ останова сразу послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ "Π’Π°Π±Π»ΠΈΡ†Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ порядок строк Π² памяти.

МоТно Π»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами строки Π² запросС?

НСт, Π² языкС запросов 1Π‘ Π½Π΅Ρ‚ прямой возмоТности ΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами строки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ строк Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запроса опрСдСляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ конструкциСй Π£ΠŸΠžΠ Π―Π”ΠžΠ§Π˜Π’Π¬ ПО. Для слоТной пСрСстановки Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π’Π°Π±Π»ΠΈΡ†Ρƒ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ.

Π§Ρ‚ΠΎ происходит с индСксами ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ строки?

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ строки ΠΈΠ· Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π²Π²Π΅Ρ€Ρ…, ΠΈ ΠΈΡ… индСксы ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ строки Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.

Как Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный порядок строк?

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

ВлияСт Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ строк Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ большом объСмС Π΄Π°Π½Π½Ρ‹Ρ…?

Π”Π°, влияСт. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ пСрСмСщСния Π²Π½ΡƒΡ‚Ρ€ΠΈ большой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сдвига памяти. Для Ρ‚Π°Π±Π»ΠΈΡ† Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 50-100 тысяч строк частоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ интСрфСйса. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ списки ΠΈΠ»ΠΈ pagination.

МоТно Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ строки Π² константС Ρ‚ΠΈΠΏΠ° Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

НСт, константы Π² 1Π‘ нСизмСняСмы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок строк, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² константу (Ссли Ρ‚ΠΈΠΏ константы позволяСт запись).