Π Π°Π±ΠΎΡ‚Π° с массивами Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых вострСбованных Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Часто трСбуСтся Π½Π΅ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт, Π° ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ сортировкС, пСрСстановкС ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ… ΠΈΠ»ΠΈ динамичСском ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ порядка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π·Π°Π΄Π°Ρ‡Π° каТСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π² 1Π‘ Π΅ΡΡ‚ΡŒ Π½ΡŽΠ°Π½ΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ошибкам ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Массивом, БпискомЗначСний ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

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

1. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΎΠ±ΠΌΠ΅Π½ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (swap)

Π‘Π°ΠΌΡ‹ΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ понятный ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” использованиС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх вСрсиях 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.x ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…: чисСл, строк, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… массивов. Алгоритм состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… шагов:

  1. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.
  2. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ.
  3. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту сохранСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для массива с числовыми значСниями:

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

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(10);

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(20);

// ОбмСн элСмСнтов с индСксами 0 ΠΈ 1

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = Массив[0];

Массив[0] = Массив[1];

Массив[1] = Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ;

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с БпискомЗначСний, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ индСксация начинаСтся с 0, Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ НСопрСдСлСно ΠΏΡ€ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ индСксС. ВсСгда провСряйтС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹:

Если ИндСкс1 >= 0 И ИндСкс1 < Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() И ИндСкс2 >= 0 И ИндСкс2 < Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π’ΠΎΠ³Π΄Π°

// ВыполняСм ΠΎΠ±ΠΌΠ΅Π½

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

2. ОбмСн Π±Π΅Π· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (арифмСтичСский ΠΈ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ)

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ XOR. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ экономит ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чисСл ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ остороТности:

  • πŸ”’ Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅/Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅: a = a + b; b = a - b; a = a - b;
  • πŸ”„ Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅/Π΄Π΅Π»Π΅Π½ΠΈΠ΅: a = a * b; b = a / b; a = a / b; (опасно ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° ноль!)
  • βŠ• ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ XOR: a = a Xor b; b = a Xor b; a = a Xor b; (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ†Π΅Π»Ρ‹Ρ… чисСл)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ XOR:

Число1 = 5;  // 0101 Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ систСмС

Число2 = 3; // 0011 Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ систСмС

Число1 = Число1 Xor Число2; // 0110 (6)

Число2 = Число1 Xor Число2; // 0101 (5)

Число1 = Число1 Xor Число2; // 0011 (3)

πŸ’‘

Для ΠΎΠ±ΠΌΠ΅Π½Π° строк ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ здСсь Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ошибкам.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании арифмСтичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΅ΡΡ‚ΡŒ риск пСрСполнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ссли числа слишком большиС. НапримСр, ΠΎΠ±ΠΌΠ΅Π½ 2147483647 (максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ) ΠΈ 1 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС.

3. ОбмСн элСмСнтов Π² Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² 1Π‘ β€” это Π½Π΅ просто массив, Π° полноцСнная структура с ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ ΠΈ строками. Для ΠΎΠ±ΠΌΠ΅Π½Π° строк мСстами Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько нюансов:

  1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылки Π½Π° строки ΠΏΠΎ индСксам.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ() ΠΈΠ»ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π²ΡƒΡ… строк:

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

Π’Π°Π±Π»ΠΈΡ†Π°.Колонки.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("НаимСнованиС");

Π’Π°Π±Π»ΠΈΡ†Π°.Колонки.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ");

Π’Π°Π±Π»ΠΈΡ†Π°.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ();

Π’Π°Π±Π»ΠΈΡ†Π°[0].НаимСнованиС = "Π’ΠΎΠ²Π°Ρ€1";

Π’Π°Π±Π»ΠΈΡ†Π°[0].ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ = 10;

Π’Π°Π±Π»ΠΈΡ†Π°.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ();

Π’Π°Π±Π»ΠΈΡ†Π°[1].НаимСнованиС = "Π’ΠΎΠ²Π°Ρ€2";

Π’Π°Π±Π»ΠΈΡ†Π°[1].ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ = 20;

// ОбмСн строк с индСксами 0 ΠΈ 1

Π‘Ρ‚Ρ€ΠΎΠΊΠ°1 = Π’Π°Π±Π»ΠΈΡ†Π°[0];

Π‘Ρ‚Ρ€ΠΎΠΊΠ°2 = Π’Π°Π±Π»ΠΈΡ†Π°[1];

Π’Π°Π±Π»ΠΈΡ†Π°[0].НаимСнованиС = Π‘Ρ‚Ρ€ΠΎΠΊΠ°2.НаимСнованиС;

Π’Π°Π±Π»ΠΈΡ†Π°[0].ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ = Π‘Ρ‚Ρ€ΠΎΠΊΠ°2.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ;

Π’Π°Π±Π»ΠΈΡ†Π°[1].НаимСнованиС = Π‘Ρ‚Ρ€ΠΎΠΊΠ°1.НаимСнованиС;

Π’Π°Π±Π»ΠΈΡ†Π°[1].ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ = Π‘Ρ‚Ρ€ΠΎΠΊΠ°1.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ;

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ ΠŸΠ»ΡŽΡΡ‹ ΠœΠΈΠ½ΡƒΡΡ‹
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ swap Π›ΡŽΠ±Ρ‹Π΅ массивы ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π°, Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
АрифмСтичСский ΠΎΠ±ΠΌΠ΅Π½ Волько числа Π­ΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ Риск пСрСполнСния, Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄
ОбмСн строк Π² Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ БохраняСт структуру Π΄Π°Π½Π½Ρ‹Ρ… Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΠΌΠ΅Π½Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ swap
АрифмСтичСский ΠΎΠ±ΠΌΠ΅Π½
ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘
Π‘Π²ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

4. ИспользованиС встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘

Начиная с вСрсии 8.3.10, Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ появились ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтов:

  • πŸ”„ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ() + Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(): Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ элСмСнт ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ.
  • πŸ“Œ ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ(): Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… контСкстах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π”Π΅Ρ€Π΅Π²ΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) Π΅ΡΡ‚ΡŒ спСциализированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.
  • πŸ”„ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() с кастомным сравнСниСм: МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для пСрСстановки элСмСнтов ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ() ΠΈ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ():

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

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А");

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

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π’");

// ОбмСн элСмСнтов 0 ΠΈ 2

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚0 = Массив[0];

Массив.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(2, Π­Π»Π΅ΠΌΠ΅Π½Ρ‚0); // ВставляСм ΠΏΠ΅Ρ€Π΅Π΄ индСксом 2

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(0); // УдаляСм ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт 0

Массив[1] = Массив[2]; // ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ элСмСнт 2 Π½Π° мСсто 1

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(2); // УдаляСм Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() для ΠΎΠ±ΠΌΠ΅Π½Π°?

ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n log n), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ прямой ΠΎΠ±ΠΌΠ΅Π½ β€” O(1). Для Π΄Π²ΡƒΡ… элСмСнтов сортировка нСэффСктивна ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Ссли Π² массивС Π΅ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ()/Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() слСдитС Π·Π° смСщСниСм индСксов послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, послС вставки элСмСнта Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ 2, элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π½Π° этой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, сдвинСтся Π½Π° 3.

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

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами элСмСнты Π² массивС с тысячами ΠΈΠ»ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ записСй, классичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ:

  • πŸš€ Π‘Π»ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½: Π Π°Π·Π±ΠΈΡ‚ΡŒ массив Π½Π° Π±Π»ΠΎΠΊΠΈ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ (для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡).
  • πŸ”„ ИспользованиС Π±ΡƒΡ„Π΅Ρ€Π°: Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ массив для хранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
  • πŸ“Š Алгоритм Π€ΠΈΡˆΠ΅Ρ€Π°-ЙСтса: Для случайной пСрСстановки (shuffle) элСмСнтов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° для большого массива:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠžΠ±ΠΌΠ΅Π½(Массив, ИндСкс1, ИндСкс2)

Если ИндСкс1 = ИндСкс2 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚;

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

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ структуру для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния

Π‘ΡƒΡ„Π΅Ρ€ = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2");

Π‘ΡƒΡ„Π΅Ρ€.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 = Массив[ИндСкс1];

Π‘ΡƒΡ„Π΅Ρ€.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2 = Массив[ИндСкс2];

Массив[ИндСкс1] = Π‘ΡƒΡ„Π΅Ρ€.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2;

Массив[ИндСкс2] = Π‘ΡƒΡ„Π΅Ρ€.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

πŸ’‘

Для массивов Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов классичСский swap ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈΠ·-Π·Π° особСнностСй управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² 1Π‘. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π±Π»ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π½Π΅Ρ‚ настоящСй многопоточности, поэтому "ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ" ΠΎΠ±ΠΌΠ΅Π½ Π±Π»ΠΎΠΊΠΎΠ² рСализуСтся Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° нСсколько Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ использованиС Π€ΠΎΠ½ΠΎΠ²Ρ‹Ρ…Π—Π°Π΄Π°Ρ‡ (доступно с вСрсии 8.3.14).

6. ЧастыС ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

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

  • πŸ”’ Π’Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ индСксы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() ΠΈΠ»ΠΈ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ().
  • πŸ”„ ОбмСн с самим собой: ВсСгда добавляйтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Если ИндСкс1 <> ИндСкс2 Π’ΠΎΠ³Π΄Π°.
  • πŸ—‘οΈ ΠŸΠΎΡ‚Π΅Ρ€Ρ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ арифмСтичСском ΠΎΠ±ΠΌΠ΅Π½Π΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чисСл ΠΈ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ пСрСполнСния.
  • πŸ”„ НСсовмСстимыС Ρ‚ΠΈΠΏΡ‹: ΠŸΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ БправочникБсылка ΠΈ ДокумСнтБсылка).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹ΠΉΠžΠ±ΠΌΠ΅Π½(Массив, ИндСкс1, ИндСкс2)

Если ИндСкс1 < 0 Π˜Π›Π˜ ИндСкс2 < 0 Π˜Π›Π˜

ИндСкс1 >= Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π˜Π›Π˜

ИндСкс2 >= Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚;

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

Если ИндСкс1 = ИндСкс2 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚;

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

// ОбмСн

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = Массив[ИндСкс1];

Массив[ИндСкс1] = Массив[ИндСкс2];

Массив[ИндСкс2] = Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ элСмСнтов Π’Π°Π±Π»ΠΈΡ†Ρ‹Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, привязанной ΠΊ Ρ„ΠΎΡ€ΠΌΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ() для отобраТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² интСрфСйсС.

FAQ: ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

МоТно Π»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Π”Π°, Π½ΠΎ это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ создания Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈ копирования Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΡΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² 1Π‘ Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π°Π±Π»ΠΈΡ†Π°.Колонки.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(1, "Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠšΠΎΠ»ΠΎΠ½ΠΊΠ°");

Π’Π°Π±Π»ΠΈΡ†Π°.Колонки[1].Имя = "Π‘Ρ‚Π°Ρ€ΠΎΠ΅Π˜ΠΌΡΠšΠΎΠ»ΠΎΠ½ΠΊΠΈ2";

Π’Π°Π±Π»ΠΈΡ†Π°.Колонки[2].Имя = "Π‘Ρ‚Π°Ρ€ΠΎΠ΅Π˜ΠΌΡΠšΠΎΠ»ΠΎΠ½ΠΊΠΈ1";

ПослС этого Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ старыС.

Как ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ элСмСнты Π² БпискСЗначСний?

Аналогично массиву, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() ΠΈ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ():

Бписок = Новый БписокЗначСний();

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚1");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚2");

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 = Бписок.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(0);

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2 = Бписок.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(1);

Бписок.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ(0, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2);

Бписок.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ(1, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1);

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС ΠΎΠ±ΠΌΠ΅Π½Π° Π² Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ обновляСтся Ρ„ΠΎΡ€ΠΌΠ°?

Π’ управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ… послС измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ явно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ() для элСмСнта Ρ„ΠΎΡ€ΠΌΡ‹:

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹Π€ΠΎΡ€ΠΌΡ‹.Π’Π°Π±Π»ΠΈΡ†Π°.ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ();

Если Ρ‚Π°Π±Π»ΠΈΡ†Π° привязана ΠΊ динамичСскому списку, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ().

Как ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ)?

Для Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… частСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ():

Π”ΠΎΠΊ.Π’ΠΎΠ²Π°Ρ€Ρ‹.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ(ИндСкс1, ИндСкс2);

Если Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния Π² строках (Π±Π΅Π· пСрСмСщСния), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ классичСский swap для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π° строки.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ для сортировки массива?

ВСхничСски Π΄Π°, Π½ΠΎ это ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивно. Для сортировки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π²Ρ€ΠΎΠ΄Π΅ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки (для ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ) ΠΈΠ»ΠΈ быстрой сортировки (для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки:

Для i = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() - 1 Π¦ΠΈΠΊΠ»

Для j = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() - i - 2 Π¦ΠΈΠΊΠ»

Если Массив[j] > Массив[j + 1] Π’ΠΎΠ³Π΄Π°

// ОбмСн элСмСнтов

ВрСмСнная = Массив[j];

Массив[j] = Массив[j + 1];

Массив[j + 1] = ВрСмСнная;

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

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

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