быстрая сортировка python ΠΊΠΎΠ΄

Алгоритм сортировки Quicksort Π½Π° Python.

Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Quicksort

Quicksort – это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ β€œΡ€Π°Π·Π΄Π΅Π»ΡΠΉ ΠΈ властвуй”. ПослС Π²Ρ‹Π±ΠΎΡ€Π° элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ массива с ΠΈΠΌΠ΅Π½Π΅ΠΌ pivot (ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт), этот массив разбиваСтся Π½Π° Π΄Π²Π΅ части: пСрвая содСрТит элСмСнты этого pivot.

Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Quicksort состоит ΠΈΠ· Π΄Π²ΡƒΡ… основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

Если сСйчас Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ понятно, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π‘ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°ΠΌΠΈ.

РСализация Π½Π° языкС Python

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ€Π΅ΡˆΠΈΠ» Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Quicksort ΠΈΠ·-Π·Π° Π΅Π΅ простоты. А Π²ΠΎΡ‚ Π½Π° Partition ΠΌΡ‹ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Ѐункция Quicksort

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, функция ΠΎΡ‡Π΅Π½ΡŒ проста. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ массив array, индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π° индСкс послСднСго элСмСнта послСдним. ПослС ΠΎΡ‡Π΅Π½ΡŒ простой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (строка 2) Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ выполняСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ partition(array,first,last). Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (сохранСнноС Π² q), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт индСкс pivot (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт элСмСнту, ΡƒΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ располоТСнному Π² нашСм массивС). ПослС Ρ‡Π΅Π³ΠΎ функция вызываСтся рСкурсивно Π½Π° Π΄Π²ΡƒΡ… Π΅Ρ‰Π΅ Π½Π΅ упорядочСнных ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΡ….

Ѐункция Partition

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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… рСализациях, Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ массив A, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ A[r], Π° послСдний элСмСнт (ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ pivot) Π±ΡƒΠ΄Π΅Ρ‚ A[p].

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ элСмСнтами ΡΠ²Π»ΡΡŽΡ‚ΡΡ всС элСмСнты, ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΎΡ‚ A[r] ΠΊ A[p-1]. Π­Ρ‚ΠΈ элСмСнты ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ элСмСнтом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Ρƒ ΠΎΠ½ΠΈ относятся. ΠŸΡ€ΠΈ запускС Partition ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ массив Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ части:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ i ΠΈ j? Π­Ρ‚ΠΎ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для раздСлСния рассматриваСмых участков Π²ΠΎ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

быстрая сортировка python ΠΊΠΎΠ΄. medias res partition. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-medias res partition. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° medias res partition. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Partition. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ j соотвСтствуСт индСксу ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта. Π”Π²Π΅ области, ТСлтая ΠΈ красная, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ элСмСнтам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ (ТСлтая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ содСрТит ≀-элСмСнты, Π° красная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ содСрТит >-элСмСнты).

j-ΠΉ элСмСнт сравниваСтся с ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ элСмСнтом:

ПояснСниС Π² Π²ΠΈΠ΄Π΅ gif Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ.

быстрая сортировка python ΠΊΠΎΠ΄. partition. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-partition. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° partition. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΊΠΎΠ΄Ρƒ:

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

БСгодня ΠΌΡ‹ рассмотрСли Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ нравится. НадСюсь Π²Π°ΠΌ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ записи

быстрая сортировка python ΠΊΠΎΠ΄. Python. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-Python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Python. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

НСкотороС врСмя Π½Π°Π·Π°Π΄ Ρƒ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ https-адрСса Π² pyhon. ПослС Π΄ΠΎΠ»Π³ΠΈΡ… поисков…

быстрая сортировка python ΠΊΠΎΠ΄. Python. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-Python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Python. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρ‹ Π² Python ΠΎΡ‡Π΅Π½ΡŒ просто. Для этого достаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅β€¦

быстрая сортировка python ΠΊΠΎΠ΄. Python. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-Python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Python. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

JSON позволяСт быстро ΠΈ просто Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ: Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прилоТСниях ΠΈ языках программирования.…

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Быстрая сортировка Π² Python

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

Быстрая сортировка β€” популярный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с сортировкой слияниСм. Π­Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ эффСктивного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки со срСднСй ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ O(n logn). Π§Π°ΡΡ‚ΡŒ Π΅Π³ΠΎ популярности Π΅Ρ‰Π΅ связана с простотой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Бпонсор поста Онлайн-курс ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ Π½Π° Python

ΠšΡƒΡ€Ρ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ ΠΈ структурам Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Python для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Π’ΠΈΠ΄Π΅ΠΎ-ΡƒΡ€ΠΎΠΊΠΈ, домашниС задания, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°. На курсС Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:
– Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, сортировка ΠΈ поиск.
– РСкурсия, Π΄Π΅Ρ€Π΅Π²ΡŒΡ, сТатиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.
– ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ ΠΈ ΠΈ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½.

Π‘ 2019 Π³ΠΎΠ΄Π° курс «читаСтся» студСнтам Московского унивСрситСта экономики ΠΈ ΠΏΡ€Π°Π²Π° ΠΈΠΌ. Π’ΠΈΡ‚Ρ‚Π΅ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡΡ… Β«ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½Π°Ρ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°Β» ΠΈ «БизнСс-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°Β».

Быстрая сортировка являСтся прСдставитСлСм Ρ‚Ρ€Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²: divide and conquer (раздСляй ΠΈ властвуй), in-place (Π½Π° мСстС) ΠΈ unstable (Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ).

Быстрая сортировка

Базовая вСрсия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

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

Когда ΠΌΡ‹ описываСм элСмСнты ΠΊΠ°ΠΊ «большС» ΠΈΠ»ΠΈ «мСньшС», Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт β€” это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ большиС ΠΈΠ»ΠΈ мСньшиС Ρ†Π΅Π»Ρ‹Π΅ числа, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Π½Π°ΠΌΠΈ свойству.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс Person, ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π΅ΡΡ‚ΡŒ имя ΠΈ возраст, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ (лСксикографичСски) ΠΈΠ»ΠΈ ΠΏΠΎ возрасту (ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ).

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Быстрая сортировка

Быстрая сортировка Ρ‡Π°Ρ‰Π΅ всСго Π½Π΅ смоТСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ массив Π½Π° Ρ€Π°Π²Π½Ρ‹Π΅ части. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ вСсь процСсс зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт. Нам Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΠΎΡ€Ρƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ большС ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ элСмСнтов ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ мСньшС, Ρ‡Π΅ΠΌ другая ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° элСмСнтов. Каким Π±Ρ‹ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π½ΠΈ казался этот процСсс, это ΠΎΡ‡Π΅Π½ΡŒ слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом Π½Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ β€” ΠΊΠ°ΠΊ Π±Ρ‹ Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠΎΡ€Ρƒ для вашСго массива? Π’ истории быстрой сортировки Π±Ρ‹Π»ΠΎ прСдставлСно ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ β€” случайный Π²Ρ‹Π±ΠΎΡ€ элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Β«Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉΒ» Π²Ρ‹Π±ΠΎΡ€ случайного элСмСнта Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ; Π²Ρ‹Π±ΠΎΡ€ элСмСнта ΠΈΠ· сСрСдины; Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, срСднСго ΠΈ послСднСго элСмСнта; ΠΈ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ слоТныС рСкурсивныС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹.

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” просто Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ (ΠΈΠ»ΠΈ послСдний) элСмСнт. По ΠΈΡ€ΠΎΠ½ΠΈΠΈ ΡΡƒΠ΄ΡŒΠ±Ρ‹, это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ быстрой сортировкС Π½Π° ΡƒΠΆΠ΅ отсортированных (ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ отсортированных) массивах.

ИмСнно Ρ‚Π°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ быстрой сортировки, ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это просто ΠΈ этот способ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΠΎΡ€Ρ‹ являСтся ΠΎΡ‡Π΅Π½ΡŒ эффСктивной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, ΠΈ это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт β€” Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ с Π½ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ? ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π΅ΡΡ‚ΡŒ нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ само Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅. Π£ нас Π±ΡƒΠ΄Π΅Ρ‚ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΒ» Π½Π° Π½Π°ΡˆΡƒ ΠΎΠΏΠΎΡ€Ρƒ, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° «мСньшиС» элСмСнты ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Β«Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅Β» элСмСнты.

ЦСль состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнты Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС элСмСнты, мСньшиС, Ρ‡Π΅ΠΌ ΠΎΠΏΠΎΡ€Π°, Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ слСва ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π° всС Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты Π±Ρ‹Π»ΠΈ справа ΠΎΡ‚ Π½Π΅Π³ΠΎ. МСньшиС ΠΈ большиС элСмСнты Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ отсортированы, ΠΌΡ‹ просто Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ сторонС оси. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ рСкурсивно ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ Π»Π΅Π²ΡƒΡŽ ΠΈ ΠΏΡ€Π°Π²ΡƒΡŽ сторону оси.

Рассмотрим пошагово Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь процСсс. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ список.

29 | 99 (low),27,41,66,28,44,78,87,19,31,76,58,88,83,97,12,21,44 (high)

Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠ°ΠΊ ΠΎΠΏΠΎΡ€Ρƒ 29), Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° мСньшиС элСмСнты (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«lowΒ») Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ элСмСнтом, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«highΒ») станСм послСдний элСмСнт Π² спискС.

29 | 99 (low),27,41,66,28,44,78,87,19,31,76,58,88,83,97,12,21 (high),44

29 | 99 (low),27,41,66,28,44,78,87,19,31,76,58,88,83,97,12,21 (high),44

29 | 21 (low),27,41,66,28,44,78,87,19,31,76,58,88,83,97,12,99 (high),44

Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ low ΠΈ high Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π½Π΅ встрСтятся Π² ΠΎΠ΄Π½ΠΎΠΌ элСмСнтС:

29 | 21,27,12,19,28 (low/high),44,78,87,66,31,76,58,88,83,97,41,99,44

28,21,27,12,19,29,44,78,87,66,31,76,58,88,83,97,41,99,44

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ достигли Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всС значСния, мСньшиС 29, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ слСва ΠΎΡ‚ 29, Π° всС значСния большС 29 справа.

Π—Π°Ρ‚Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ 28,21,27,12,19 (лСвая сторона) ΠΈ 44,78,87,66,31,76,58,88,83,97,41,99,44 (правая сторона). И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

РСализация

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массивов

Быстрая сортировка являСтся СстСствСнным рСкурсивным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ β€” Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ массив Π½Π° мСньшиС массивы, пСрСмСститС элСмСнты Π² Π½ΡƒΠΆΠ½ΡƒΡŽ сторону оси ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅.

ΠŸΡ€ΠΈ этом ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” partition() ΠΈ quick_sort().

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ partition():

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ quick_sort():

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ quick_sort():

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ unstable (нСстабилСн), Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° 19 Π±ΡƒΠ΄ΡƒΡ‚ всСгда Π² этом порядкС Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π₯отя это Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚ для массива Ρ†Π΅Π»Ρ‹Ρ… чисСл.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ быстрой сортировки

Учитывая, Ρ‡Ρ‚ΠΎ быстрая сортировка сортируСт Β«ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈΒ» Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, это оказываСтся ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для распараллСливания. Π£ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сортируСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Β«ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΡƒΒ» массива, ΠΈ Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Π΄Π²ΠΎΠ΅ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Π΅Π³ΠΎ сортировки.

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

Для сортировки Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой нСрСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π”Π°ΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ простоС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сортировка вставкой, Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивным для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов, Ρ‡Π΅ΠΌ быстрая сортировка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ наш подмассив лишь нСбольшоС количСство элСмСнтов (Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ говорят ΠΎ 10 ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ), ΠΈ Ссли Π΄Π°, Ρ‚ΠΎ ΠΌΡ‹ Π±Ρ‹ отсортировали Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Insertion Sort (сортировка вставкой).

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

Как ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ быстрой сортировки сильно зависит ΠΎΡ‚ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠΏΠΎΡ€Ρ‹ β€” ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Β«ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒΒ» ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΈ Π² пространствС стСка). ΠΠ΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ прСпятствиСм для использования с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, нСсмотря Π½Π° всС это, срСдняя ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ O(n*logn) Π² быстрой сортировки, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшоС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ простая рСализация Π΄Π΅Π»Π°ΡŽΡ‚ Π΅Π³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ эффСктивным ΠΈ популярным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ОбъяснСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π½Π° Python

быстрая сортировка python ΠΊΠΎΠ΄. vector landfill garbage sorting. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-vector landfill garbage sorting. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° vector landfill garbage sorting. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны популярныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ рСализация Π½Π° Python. А Π΅Ρ‰Ρ‘ сравним, ΠΊΠ°ΠΊ быстро ΠΎΠ½ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ элСмСнты Π² спискС.

Π’ качСствС ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ сортировку чисСл Π² порядкС возрастания. Но эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ваши потрСбности.

ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ сортировка

Π­Ρ‚ΠΎΡ‚ простой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ списку, сравнивая элСмСнты ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ ΠΈ мСняя ΠΈΡ… мСстами, ΠΏΠΎΠΊΠ° Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты Π½Π΅ «всплывут» Π² Π½Π°Ρ‡Π°Π»ΠΎ списка, Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π½Π΅ останутся Π½Π° Β«Π΄Π½Π΅Β».

Алгоритм

Π‘Π½Π°Ρ‡Π°Π»Π° ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° элСмСнта списка. Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт большС, ΠΎΠ½ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами. Если ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС, оставляСм ΠΈΡ… ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π΅ элСмСнтов, сравниваСм ΠΈΡ… значСния ΠΈ мСняСм мСстами ΠΏΡ€ΠΈ нСобходимости. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ послСднСй ΠΏΠ°Ρ€Ρ‹ элСмСнтов Π² спискС.

ΠŸΡ€ΠΈ достиТСнии ΠΊΠΎΠ½Ρ†Π° списка процСсс повторяСтся Π·Π°Π½ΠΎΠ²ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта. Π­Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивно, Ссли Π² массивС Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΠΌΠ΅Π½. Алгоритм повторяСтся nΒ² Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли список ΡƒΠΆΠ΅ отсортирован.

9–10 октября, Москва ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° список отсортирован.

РСализация

ВрСмя сортировки

Если Π²Π·ΡΡ‚ΡŒ самый Ρ…ΡƒΠ΄ΡˆΠΈΠΉ случай (ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ список отсортирован ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ), Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π²Π½Ρ‹ O(nΒ²), Π³Π΄Π΅ n β€” количСство элСмСнтов списка.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€ΠΊΠΎΠΉ

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сСгмСнтируСт список Π½Π° Π΄Π²Π΅ части: ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈ Π½Π΅ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ. НаимСньший элСмСнт удаляСтся ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ списка ΠΈ добавляСтся Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.

Алгоритм

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ извСстно, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка отсортирован, Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ наимСньший элСмСнт ΠΈΠ· ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ ΠΈ мСняСм мСстами со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌ это Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ останСтся послСдний элСмСнт Π² спискС.

РСализация

По ΠΌΠ΅Ρ€Π΅ увСличСния значСния i Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ мСньшС элСмСнтов.

ВрСмя сортировки

Π—Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° сортировку Π²Ρ‹Π±ΠΎΡ€ΠΊΠΎΠΉ Π² срСднСм ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ O(nΒ²), Π³Π΄Π΅ n β€” количСство элСмСнтов списка.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° вставками

Как ΠΈ сортировка Π²Ρ‹Π±ΠΎΡ€ΠΊΠΎΠΉ, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сСгмСнтируСт список Π½Π° Π΄Π²Π΅ части: ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈ Π½Π΅ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ. Алгоритм ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ сСгмСнт ΠΈ вставляСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сСгмСнта.

Алгоритм

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ элСмСнтам нСсортированного сСгмСнта, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты Π² отсортированном сСгмСнтС Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ списку, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтим элСмСнт мСньшС x ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠΉΠ΄Ρ‘ΠΌ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° списка. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС x помСщаСтся Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

РСализация

ВрСмя сортировки

ВрСмя сортировки вставками Π² срСднСм Ρ€Π°Π²Π½ΠΎ O(nΒ²), Π³Π΄Π΅ n β€” количСство элСмСнтов списка.

ΠŸΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ сортировка

Π’Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ сортировка ΠΊΡƒΡ‡Π΅ΠΉ. Π­Ρ‚ΠΎΡ‚ популярный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠ°ΠΊ ΠΈ сортировки вставками ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΎΠΉ, сСгмСнтируСт список Π½Π° Π΄Π²Π΅ части: ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈ Π½Π΅ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ. Алгоритм ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ сСгмСнт списка Π² структуру Π΄Π°Π½Π½Ρ‹Ρ… Β«ΠΊΡƒΡ‡Π°Β» (heap), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ эффСктивно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ самый большой элСмСнт.

Алгоритм

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ список Π² Max Heap β€” Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π³Π΄Π΅ самый большой элСмСнт являСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ Π΄Π΅Ρ€Π΅Π²Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ этот элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† списка. ПослС пСрСстраиваСм Max Heap ΠΈ снова ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ наибольший элСмСнт ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ послСдним элСмСнтом Π² спискС.

Π­Ρ‚ΠΎΡ‚ процСсс построСния ΠΊΡƒΡ‡ΠΈ повторяСтся, ΠΏΠΎΠΊΠ° всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π΄Π΅Ρ€Π΅Π²Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

РСализация

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ heapify() для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

ВрСмя сортировки

Π’ срСднСм врСмя сортировки ΠΊΡƒΡ‡Π΅ΠΉ составляСт O(n log n), Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ относится ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ «раздСляй ΠΈ властвуй». Он Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ список Π½Π° Π΄Π²Π΅ части, ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ½ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π΅Ρ‰Ρ‘ Π½Π° Π΄Π²Π΅ ΠΈ Ρ‚. Π΄. Бписок разбиваСтся ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ останутся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ элСмСнты.

БосСдниС элСмСнты становятся отсортированными ΠΏΠ°Ρ€Π°ΠΌΠΈ. Π—Π°Ρ‚Π΅ΠΌ эти ΠΏΠ°Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ всС элСмСнты.

Алгоритм

Бписок рСкурсивно раздСляСтся ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, ΠΏΠΎΠΊΠ° Π² ΠΈΡ‚ΠΎΠ³Π΅ Π½Π΅ получатся списки Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² ΠΎΠ΄ΠΈΠ½ элСмСнт. Массив ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта считаСтся упорядочСнным. БосСдниС элСмСнты ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ вмСстС. Π­Ρ‚ΠΎ происходит Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ получится ΠΏΠΎΠ»Π½Ρ‹ΠΉ отсортированный список.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° осущСствляСтся ΠΏΡƒΡ‚Ρ‘ΠΌ сравнСния Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… элСмСнтов ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подмассива. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ элСмСнты ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подмассива ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ. НаимСньший элСмСнт пСрСмСщаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ массив. Π‘Ρ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ массива ΠΈ подмассива, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π±Ρ‹Π» взят элСмСнт, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° 1.

РСализация

ВрСмя сортировки

Π’ срСднСм врСмя сортировки слияниСм составляСт O(n log n).

Быстрая сортировка

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

Алгоритм

Быстрая сортировка начинаСтся с разбиСния списка ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· элСмСнтов Π² качСствС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ. А всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот элСмСнт встал Π½Π° своё мСсто. ВсС элСмСнты мСньшС Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²Π»Π΅Π²ΠΎ, Π° Ρ€Π°Π²Π½Ρ‹Π΅ ΠΈ большиС элСмСнты ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΏΡ€Π°Π²ΠΎ.

РСализация

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Бпособ разбиСния массива, рассмотрСнный здСсь, соотвСтствуСт схСмС Π₯ΠΎΠ°Ρ€Π° (создатСля Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°).

ВрСмя выполнСния

Π’ срСднСм врСмя выполнСния быстрой сортировки составляСт O(n log n).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ быстрой сортировки Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ссли ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт Ρ€Π°Π²Π΅Π½ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ ΠΈΠ»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ элСмСнтам списка. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΈΡ… условиях, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ сортировок ΠΊΡƒΡ‡Π΅ΠΉ ΠΈ слияниСм, ΠΎΠ±Π΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС врСмя сортировки O(n log n), быстрая сортировка Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ O(nΒ²).

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки Π½Π° Python

Иногда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ пСрСчислСнныС Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, скорСС всСго, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки, ΡƒΠΆΠ΅ прСдоставлСнныС Π² языкС программирования.

ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС списка ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sort() :

Или ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sorted() для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ отсортированного списка, оставив Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ список Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ:

Оба эти ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Π² порядкС возрастания, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок, установив для Ρ„Π»Π°Π³Π° reverse Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True :

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ списки ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ классов. Ѐункция sorted() ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ списки, строки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, словари, Π½Π°Π±ΠΎΡ€Ρ‹ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Tim Sort, основанный Π½Π° сортировкС слияниСм ΠΈ сортировкС вставкой.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ скоростСй сортировок

Для сравнСния сгСнСрируСм массив ΠΈΠ· 5000 чисСл ΠΎΡ‚ 0 Π΄ΠΎ 1000. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ 10 Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, насколько ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅Π½.

быстрая сортировка python ΠΊΠΎΠ΄. sravnenie algoritmov sortirovki. быстрая сортировка python ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. быстрая сортировка python ΠΊΠΎΠ΄-sravnenie algoritmov sortirovki. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° быстрая сортировка python ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° sravnenie algoritmov sortirovki. Quicksort – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки. По Π΄Π°Π½Π½Ρ‹ΠΌ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΎΠ½ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ (хотя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π΅Π³ΠΎ вытСсняСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Timsort). Quicksort Π±Ρ‹Π» ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π² 1961 Π³ΠΎΠ΄Ρƒ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ сути этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

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

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

Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ эти Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… визуализация.

Π₯ΠΈΠ½Ρ‚ для программистов: Ссли Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π½Π° сорСвнования Huawei Cup, Ρ‚ΠΎ бСсплатно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ ΠΊ ΠΎΠ½Π»Π°ΠΉΠ½-школС для участников. МоТно ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌ ΠΈ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ·Ρ‹ Π² самом сорСвновании.

ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ рСгистрации

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Алгоритмы сортировки Π² Python

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

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

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

Для простоты Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ числа Π±ΡƒΠ΄Π΅ΠΌ Π² порядкС ΠΈΡ… возрастания.

ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ сортировка (Bubble Sort)

Π­Ρ‚ΠΎΡ‚ самый простой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ списку, сравнивая элСмСнты ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ ΠΈ мСняя ΠΈΡ… мСстами, ΠΏΠΎΠΊΠ° Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты Π½Π΅ пСрСстанут Β«Π²ΡΠΏΠ»Ρ‹Π²Π°Ρ‚ΡŒΒ» Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° списка, Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ элСмСнты Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ «снизу».

ОбъяснСниС

НачнСм со сравнСния ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… элСмСнтов списка. Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт большС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ, ΠΌΡ‹ мСняСм ΠΈΡ… мСстами. Если ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС, ΠΌΡ‹ оставляСм ΠΈΡ… ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π΅ элСмСнтов, сравниваСм ΠΈΡ… значСния ΠΈ мСняСм мСстами ΠΏΡ€ΠΈ нСобходимости. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ послСднСй ΠΏΠ°Ρ€Ρ‹ элСмСнтов Π² спискС.

Достигнув ΠΊΠΎΠ½Ρ†Π° списка, повторяСм этот процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта снова. Π₯отя это ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивно. Π§Ρ‚ΠΎ Ссли Π² массивС Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π·Π°ΠΌΠ΅Π½Ρƒ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ всС Π΅Ρ‰Π΅ повторяСм, Π΄Π°ΠΆΠ΅ Ссли список ΡƒΠΆΠ΅ отсортирован? ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ список n^2 Ρ€Π°Π·Π°.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ сортировку.

ΠžΡ‚ΠΊΡƒΠ΄Π° Π½Π°ΠΌ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ сортировку? Если Π±Ρ‹ элСмСнты Π±Ρ‹Π»ΠΈ отсортированы, Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡ… ΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ мСняСм элСмСнты, ΠΌΡ‹ устанавливаСм Ρ„Π»Π°Π³ Π² True, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ процСсс сортировки. Если пСрСстановок Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Ρ„Π»Π°Π³ останСтся False, ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ остановится.

РСализация

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΡƒΡŽ сортировку Π² Python ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Алгоритм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ†ΠΈΠΊΠ»Π΅ while, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ установили для swapped Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΡˆΠ΅Π» ΠΏΠΎ списку хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС (ΠΊΠΎΠ³Π΄Π° список отсортирован Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС) Ρ€Π°Π²Π½Π° O(n^2).

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ (Selection Sort)

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сСгмСнтируСт список Π½Π° Π΄Π²Π΅ части: отсортированныС ΠΈ нСсортированныС. Он постоянно удаляСт наимСньший элСмСнт ΠΈΠ· нСсортированного сСгмСнта списка ΠΈ добавляСт Π΅Π³ΠΎ Π² отсортированный сСгмСнт.

ОбъяснСниС

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

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

РСализация

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ i увСличиваСтся, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ всС мСньшС элСмСнтов.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π² срСднСм составляСт O(n^2).

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° вставками (Insertion Sort)

Как ΠΈ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сСгмСнтируСт список Π½Π° отсортированныС ΠΈ нСсортированныС части. Он ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ нСсортированный сСгмСнт ΠΈ вставляСт просматриваСмый элСмСнт Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ отсортированного списка.

ОбъяснСниС

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка отсортирован. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Ρ…. Если x большС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΌΡ‹ оставляСм Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Если x мСньшС, ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ Π·Π°Ρ‚Π΅ΠΌ устанавливаСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² x.

Когда ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ элСмСнтам нСсортированного сСгмСнта, ΠΌΡ‹ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты Π² отсортированном сСгмСнтС Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ списку, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтим элСмСнт мСньшС x, ΠΈΠ»ΠΈ Π½Π΅ достигнСм ΠΊΠΎΠ½Ρ†Π° отсортированного сСгмСнта, Π° Π·Π°Ρ‚Π΅ΠΌ помСстим x Π² Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

РСализация

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки вставками Π² срСднСм Ρ€Π°Π²Π½Π° O(n^2).

ΠŸΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ сортировка (Heap Sort) (Π°Π½Π³Π». Heapsort, Β«Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΡƒΡ‡Π΅ΠΉΒ»)

Π­Ρ‚ΠΎΡ‚ популярный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, ΠΊΠ°ΠΊ сортировки вставками ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, сСгмСнтируСт список Π½Π° отсортированныС ΠΈ нСсортированныС части. Он ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ нСсортированный сСгмСнт списка Π² структуру Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° ΠΊΡƒΡ‡Π° (heap), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ эффСктивно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ самый большой элСмСнт.

ОбъяснСниС

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с прСобразования списка Π² Max Heap β€” Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π³Π΄Π΅ самым большим элСмСнтом являСтся ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π». Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ этот элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† списка. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ восстанавливаСм Π½Π°ΡˆΡƒ Max Heap, которая Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎ мСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, помСщая Π½ΠΎΠ²ΠΎΠ΅ наибольшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ послСдним элСмСнтом списка.

ΠœΡ‹ повторяСм этот процСсс построСния ΠΊΡƒΡ‡ΠΈ, ΠΏΠΎΠΊΠ° всС ΡƒΠ·Π»Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

РСализация

ΠœΡ‹ создаСм Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ heapify для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’ срСднСм ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки ΠΊΡƒΡ‡ΠΈ составляСт O(nlog (n)), Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ….

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм (Merge Sort)

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ «раздСляй ΠΈ властвуй» Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ список ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ список Π½Π° ΠΏΠ°Ρ€Ρ‹, ΠΏΠΎΠΊΠ° Π² Π½Π΅ΠΌ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ элСмСнты.

БосСдниС элСмСнты становятся отсортированными ΠΏΠ°Ρ€Π°ΠΌΠΈ, Π·Π°Ρ‚Π΅ΠΌ отсортированныС ΠΏΠ°Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ отсортированный список со всСми элСмСнтами нСсортированного списка.

ОбъяснСниС

ΠœΡ‹ рСкурсивно раздСляСм список ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ списки с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ объСдиняСм ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ, которая Π±Ρ‹Π»Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π°, ΠΈ ΠΏΡ€ΠΈ этом сортируя ΠΈΡ….

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

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ мСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ индСкс, элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

РСализация

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ функция merge_sort(), Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ отсортированный список, Π° Π½Π΅ сортируСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ список.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для сортировки слияниСм трСбуСтся пространство Π² памяти для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ списка Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ список.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’ срСднСм ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки слияниСм составляСт O(nlog (n)).

Быстрая сортировка (Quick Sort)

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

ОбъяснСниС

Быстрая сортировка начинаСтся с разбиСния списка β€” Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния списка, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² Π΅Π³ΠΎ отсортированном мСстС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ называСтся ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ. ВсС элСмСнты, мСньшиС, Ρ‡Π΅ΠΌ этот элСмСнт, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²Π»Π΅Π²ΠΎ. ВсС Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ элСмСнты ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π²ΠΏΡ€Π°Π²ΠΎ.

Зная, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт находится Π½Π° своСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ мСстС, ΠΌΡ‹ рСкурсивно сортируСм значСния Π²ΠΎΠΊΡ€ΡƒΠ³ этого элСмСнта, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ отсортирован вСсь список.

РСализация

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’ срСднСм ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстрой сортировки составляСт O(nlog (n)).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Алгоритм быстрой сортировки Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ссли ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ наимСньшим ΠΈΠ»ΠΈ наибольшим элСмСнтом списка. Быстрая сортировка ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС с Π±ΠΎΠ»Π΅Π΅ сбалансированными значСниями. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ сортировки ΠΊΡƒΡ‡ΠΈ ΠΈ сортировки слияниСм, ΠΎΠ±Π΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° O(nlog (n)), быстрая сортировка ΠΈΠΌΠ΅Π΅Ρ‚ Ρ…ΡƒΠ΄ΡˆΠ΅Π΅ врСмя O(n^2).

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки Python

Π₯отя ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ эти Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сортировки, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Python Π²Ρ‹, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сортировки.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ список, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ содСрТимоС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sort():

Или ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sorted() для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ отсортированного списка:

Они ΠΎΠ±Π° ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² порядкС возрастания, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² порядкС убывания, установив для Ρ„Π»Π°Π³Π° рСвСрса Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ созданных Π½Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки, ΠΎΠ±Π΅ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ списки ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ классов. Ѐункция sorted() ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя β€” списки, строки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, словари, Π½Π°Π±ΠΎΡ€Ρ‹ (set) ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

ВстроСнная функция сортировки Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки Π’ΠΈΠΌΠ°. Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, основан Π½Π° сортировкС слияниСм ΠΈ сортировкС вставкой.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ скорости

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ быстро Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рассмотрСнныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΌΡ‹ сгСнСрируСм список ΠΈΠ· 5000 чисСл ΠΎΡ‚ 0 Π΄ΠΎ 1000. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ это 10 Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сортировки.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ, врСмя Π² сСкундах:

RunBubble
ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ
Selection
Π’Ρ‹Π±ΠΎΡ€ΠΎΠΌ
Insertion
Вставкой
Heap
ΠŸΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ
Merge
БлияниСм
Quick
Быстрая
15.5318861007690431.23152899742126461.60355424880981450.040066719055175780.02619910240173340.016391992568969727
24.9217622280120851.24728584289550781.59103298187255860.039995908737182620.0258429050445556640.01661396026611328
34.9164218902587891.22440195083618161.59362983703613280.0440728664398193360.0286228656768798830.01646280288696289
45.1547043323516851.25053834915161131.63463616371154790.041282892227172850.0288281440734863280.01860785484313965
54.9552288055419921.28987407684326171.617596149444580.045157194137573240.0331487655639648440.01885080337524414
65.0490729808807371.25466513633728031.6251549720764160.0425729751586914060.025952100753784180.01628708839416504
75.055918931961061.24911880493164061.61981010437011720.0402898788452148440.0273351669311523440.017602920532226562
85.0879919528961181.25808811187744141.62603712081909180.042646884918212890.026338100433349610.017055988311767578
95.0328917503356931.24915099143981931.61446499824523930.043021917343139650.0329370498657226560.0176239013671875
105.1429288387298581.22021102905273441.57273912429809570.039661169052124020.02572607994079590.016061067581176758
Avg5.0848807811737061.24748632907867441.60986557006835930.041876840591430670.028093028068542480.017155838012695313

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, Ссли ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ тСст ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ. ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ сортировка (Bubble Sort) β€” самая мСдлСнная ΠΈ Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠ°Ρ ΠΈΠ· всСх Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Π₯отя ΠΎΠ½Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² качСствС ввСдСния Π² изучСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки, ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для практичСского использования.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ быстрая сортировка выполняСтся ΠΎΡ‡Π΅Π½ΡŒ быстро, ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ сортировка слияниСм, ΠΈ для Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ трСбуСтся ΠΌΠ½ΠΎΠ³ΠΎ памяти. Напомним, Ρ‡Ρ‚ΠΎ наш ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт Π±Ρ‹Π» основан Π½Π° срСднСм элСмСнтС списка, Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠΏΠΎΡ€Π½Ρ‹Π΅ элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сортировка вставкой выполняСт Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС сравнСний, Ρ‡Π΅ΠΌ сортировка Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС, Π½ΠΎ Π² нашСм тСстС сортировка Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° вставкой Π΄Π΅Π»Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π·Π°ΠΌΠ΅Π½, Ρ‡Π΅ΠΌ сортировка Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго ΠΎΠ±ΠΌΠ΅Π½ значСниями занял Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ сравнСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, поэтому ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ этот Β«ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉΒ» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ самих Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ срСдС запуска Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Ρ‚ΠΎΠΆΠ΅ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

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

Алгоритмы сортировки Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ способов ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ наши Π΄Π°Π½Π½Ρ‹Π΅. ΠœΡ‹ рассмотрСли 6 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² β€” Bubble Sort, Selection Sort, Insertion Sort, Merge Sort, Heap Sort, Quick Sort β€” ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Python.

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

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *