Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ слоТных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ программисты часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… структур, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², чисСл ΠΈΠ»ΠΈ строк. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹Π΅ инструмСнты Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈΠ½ΠΎΠ³Π΄Π° использованиС ΠΈΠΌΠ΅Π½Π½ΠΎ массива являСтся Π±ΠΎΠ»Π΅Π΅ эффСктивным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ потрСблСния рСсурсов.

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

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

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ‚ΠΈΠΏΠ° Массив Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘

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

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

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ встроСнного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Массив.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΌΠΈ особСнностями ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π³Π΄Π΅ основной ΡƒΠΏΠΎΡ€ сдСлан Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ запросами. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈΠ»ΠΈ Π² Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… заданиях, Π³Π΄Π΅ созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, сортировка массива становится Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив, содСрТащий элСмСнты Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, числа ΠΈ строки ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ), Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° прСрвСтся ошибкой сравнСния. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ коллСкция ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Π° ΠΏΠ΅Ρ€Π΅Π΄ запуском Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Для эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ рСкомСндуСтся Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ содСрТимого. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π’ΠΈΠΏΠ—Π½Ρ‡ для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ элСмСнтов. Если Π² массивС хранятся структуры, сортировка Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π»ΠΎΠ³ΠΈΠΊΠΈ сравнСния.

РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ

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

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ сортировку массива чисСл ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для ΠΎΠ±ΠΌΠ΅Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ всСм ΠΏΠ°Ρ€Π°ΠΌ элСмСнтов.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ(МассивЧисСл)

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² = МассивЧисСл.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ;

Для Π‘Ρ‡1 = 0 По ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² - 2 Π¦ΠΈΠΊΠ»

Для Π‘Ρ‡2 = 0 По ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² - Π‘Ρ‡1 - 2 Π¦ΠΈΠΊΠ»

Если МассивЧисСл[Π‘Ρ‡2] > МассивЧисСл[Π‘Ρ‡2 + 1] Π’ΠΎΠ³Π΄Π°

Π’Ρ€Π΅ΠΌΠ—Π½Π°Ρ‡ = МассивЧисСл[Π‘Ρ‡2];

МассивЧисСл[Π‘Ρ‡2] = МассивЧисСл[Π‘Ρ‡2 + 1];

МассивЧисСл[Π‘Ρ‡2 + 1] = Π’Ρ€Π΅ΠΌΠ—Π½Π°Ρ‡;

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

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

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

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

НСсмотря Π½Π° простоту Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° составляСт O(nΒ²), Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов (Π±ΠΎΠ»Π΅Π΅ 1000-2000 элСмСнтов). Π’ Ρ‚Π°ΠΊΠΈΡ… случаях врСмя выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ возрасти, вызывая зависаниС интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки

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

Для сортировки строк ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ условиС сравнСния. НапримСр, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со строками ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния строк, учитывая рСгистр символов, Ссли это Π²Π°ΠΆΠ½ΠΎ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ. Ѐункция Π‘Ρ‚Ρ€Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠΉ настройки ΠΏΡ€Π°Π²ΠΈΠ» сравнСния.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· Π’Π°Π±Π»ΠΈΡ†Ρƒ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

НаиболСС эффСктивным ΠΈ"Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ" для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ способом сортировки Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ… являСтся использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π’Π°Π±Π»ΠΈΡ†Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС, высокооптимизированныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ сортировки, написанныС Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния Π΄Π°ΠΆΠ΅ для дСсятков тысяч записСй.

Π‘ΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ массива Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ Π² массив. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ памяти Π½Π° созданиС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ процСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

  • πŸš€ Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: ВстроСнныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС самописных Ρ†ΠΈΠΊΠ»ΠΎΠ².
  • πŸ›  Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ настройки: МоТно Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сортировки (возрастаниС/ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΠ΅) ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅ΠΉ.
  • πŸ”„ Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈ создании ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Если массив содСрТит Π½Π΅ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ Π₯ранилищСЗначСния, ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ сортировку. Для числовых массивов всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ Число.

πŸ’‘

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

Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: сначала создаСтся Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π·Π°Ρ‚Π΅ΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ заполняСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· массива. ПослС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сортировки Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π­Ρ‚ΠΎ стандартный ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-ΠΊΠΎΠ΄Π΅.

Алгоритм быстрой сортировки (QuickSort) для 1Π‘

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массивы нСпосрСдствСнно Π² памяти Π±Π΅Π· создания ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†, Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ станСт рСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° QuickSort (быстрая сортировка). Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ"раздСляй ΠΈ властвуй", Ρ‡Ρ‚ΠΎ обСспСчиваСт ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n log n).

РСализация QuickSort Π² 1Π‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся рСкурсивно. ВыбираСтся ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт (pivot), массив раздСляСтся Π½Π° Π΄Π²Π΅ части: элСмСнты мСньшС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΈ элСмСнты большС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° рСкурсивно вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° БыстраяБортировка(Массив, Начало, ΠšΠΎΠ½Π΅Ρ†)

Если Начало >= ΠšΠΎΠ½Π΅Ρ† Π’ΠΎΠ³Π΄Π°

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

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

Π›Π΅Π²Ρ‹ΠΉ = Начало;

ΠŸΡ€Π°Π²Ρ‹ΠΉ = ΠšΠΎΠ½Π΅Ρ†;

ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ = Массив[(Начало + ΠšΠΎΠ½Π΅Ρ†) / 2];

Пока Π›Π΅Π²Ρ‹ΠΉ <= ΠŸΡ€Π°Π²Ρ‹ΠΉ Π¦ΠΈΠΊΠ»

Пока Массив[Π›Π΅Π²Ρ‹ΠΉ] < ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ Π¦ΠΈΠΊΠ»

Π›Π΅Π²Ρ‹ΠΉ = Π›Π΅Π²Ρ‹ΠΉ + 1;

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

Пока Массив[ΠŸΡ€Π°Π²Ρ‹ΠΉ] > ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ Π¦ΠΈΠΊΠ»

ΠŸΡ€Π°Π²Ρ‹ΠΉ = ΠŸΡ€Π°Π²Ρ‹ΠΉ - 1;

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

Если Π›Π΅Π²Ρ‹ΠΉ <= ΠŸΡ€Π°Π²Ρ‹ΠΉ Π’ΠΎΠ³Π΄Π°

Π’Ρ€Π΅ΠΌ = Массив[Π›Π΅Π²Ρ‹ΠΉ];

Массив[Π›Π΅Π²Ρ‹ΠΉ] = Массив[ΠŸΡ€Π°Π²Ρ‹ΠΉ];

Массив[ΠŸΡ€Π°Π²Ρ‹ΠΉ] = Π’Ρ€Π΅ΠΌ;

Π›Π΅Π²Ρ‹ΠΉ = Π›Π΅Π²Ρ‹ΠΉ + 1;

ΠŸΡ€Π°Π²Ρ‹ΠΉ = ΠŸΡ€Π°Π²Ρ‹ΠΉ - 1;

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

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

БыстраяБортировка(Массив, Начало, ΠŸΡ€Π°Π²Ρ‹ΠΉ);

БыстраяБортировка(Массив, Π›Π΅Π²Ρ‹ΠΉ, ΠšΠΎΠ½Π΅Ρ†);

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

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

πŸ’‘

QuickSort являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ для сортировки Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π² памяти, ΠΊΠΎΠ³Π΄Π° использованиС Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

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

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сортировки

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сортировки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° систСмы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ взвСшСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ рассмотрСнными ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ врСмя выполнСния для массива ΠΈΠ· 10 000 Ρ†Π΅Π»Ρ‹Ρ… чисСл.

ΠœΠ΅Ρ‚ΠΎΠ΄ сортировки Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ВрСмя выполнСния (мс) ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти
ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ сортировка O(nΒ²) ~1500-2000 МинимальноС
Быстрая сортировка (QuickSort) O(n log n) ~15-25 Π‘Ρ€Π΅Π΄Π½Π΅Π΅ (стСк)
Π’Π°Π±Π»ΠΈΡ†Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Нативный C++ ~5-10 ВысокоС

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…, нативная сортировка Ρ‡Π΅Ρ€Π΅Π· Π’Π°Π±Π»ΠΈΡ†Ρƒ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρƒ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. Однако, Ссли массив нСбольшой (Π΄ΠΎ 100 элСмСнтов), Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈ тСстировании ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всСгда ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сортировки ΠΌΠ°Π»Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… overhead создания Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² скорости самого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки.

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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΈ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ случаи

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

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ слСдуСт ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ значСниям НСопрСдСлСно (Null). Если Π² массивС чисСл встрСчаСтся Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, сравнСниС Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ выполнСния. РСкомСндуСтся Π»ΠΈΠ±ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅Π΄ сортировкой, Π»ΠΈΠ±ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π½Π° Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Π΅ значСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 0 ΠΈΠ»ΠΈ минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ число).

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях. ВсСгда провСряйтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (8.3.20, 8.3.25 ΠΈ Ρ‚.Π΄.), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ядра ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ слоТных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнный ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ 1Π‘. УстанавливайтС Ρ‚ΠΎΡ‡ΠΊΠΈ останова Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² сравнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСксов ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ быстро Π½Π°ΠΉΡ‚ΠΈ логичСскиС ошибки Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

β˜‘οΈ Π§Π΅ΠΊ-лист ΠΏΠ΅Ρ€Π΅Π΄ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ сортировки

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

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы (FAQ)

МоТно Π»ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив структур ΠΏΠΎ нСскольким полям?

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

ВлияСт Π»ΠΈ Ρ€Π΅ΠΆΠΈΠΌ совмСстимости Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки?

Π Π΅ΠΆΠΈΠΌ совмСстимости ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сравнСния строк ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ (Ρ†ΠΈΠΊΠ»Ρ‹, присваивания) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Однако, Π½ΠΎΠ²Ρ‹Π΅ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JIT-компиляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ….

Как ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π² порядкС убывания?

Для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ ΠΈ быстрой сортировки достаточно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния с > Π½Π° <. Для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ "Π£Π±Ρ‹Π²Π°Π½ΠΈΠ΅" ΠΊ ΠΈΠΌΠ΅Π½ΠΈ сортируСмой ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² строкС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

БСзопасно Π»ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив, Ссли ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…?

НСт, это нСбСзопасно. Π’ 1Π‘ Π½Π΅Ρ‚ встроСнных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Если массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠΏΠΈΠ΅ΠΉ массива.