Skip to content

Vitaminvp/Sorting-Algorithms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Sorting-Algorithms

Sorting Algorithms in JavaScript

Bubble sort

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

ОсновноС достоинство ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для понимания ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ β€” ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ, Π½ΠΎ эффСктивСн ΠΎΠ½ лишь для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов.

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

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2).

Bubble sort animation

wiki

Selection Sort

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Selection Sort начинаСтся с поиска наимСньшСго элСмСнта Π² спискС ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΅Π³ΠΎ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом (Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, наимСньший элСмСнт помСщаСтся Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² отсортированном массивС).

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

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, ΠΏΡ€ΠΈ i-ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΏΠΎ списку (0 ≀ i ≀ n-2) Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡ‰Π΅Ρ‚ наимСньший элСмСнт срСди послСдних n-i элСмСнтов ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ с A[ i ]. ПослС выполнСния n-1 ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² список оказываСтся отсортирован.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2).

Selection Sort

wiki

Insertion Sort

На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки встаками выбираСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива ΠΈ вставляСтся Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΡƒΠΆΠ΅ отсортированном массивС, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… элСмСнты Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ исчСрпана.

ΠœΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· исходного массива ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½; ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ практичСски любой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π²Ρ‹Π±ΠΎΡ€Π°.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ (ΠΈ с Ρ†Π΅Π»ΡŒΡŽ получСния устойчивого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки), элСмСнты Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ порядку ΠΈΡ… появлСния Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ массивС.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° JavaScript Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки встаками ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ эта стратСгия Π²Ρ‹Π±ΠΎΡ€Π°.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2).

Insertion Sort wiki

Merge Sort

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ «раздСляй ΠΈ властвуй» для сортировки элСмСнтов Π² массивС.

По сути, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вмСсто Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивом Π² Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ½ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° Π΄Π²Π΅ части, ΠΏΠΎΠΊΠ° ΠΎΠ±Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ Π½Π΅ отсортированы, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ список.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n log n).

Merge Sort wiki

Quick Sort

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2).

Quick Sort wiki

Shell Sort

Shell Sort «сортировкой ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽΒ», ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Insertion Sort, разбивая исходный массив Π½Π° нСсколько ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… подмассивов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сортируСтся с использованиСм Insertion Sort. Бпособ Π²Ρ‹Π±ΠΎΡ€Π° этих подмассивов - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Shell Sort. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ массив Π½Π° подмассивы смСТных элСмСнтов, сортировка ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» d, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ gap, для создания подмассива, выбирая всС элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ d-ΠΌΠΈ элСмСнтами, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

  • Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ d = n / 2, d2 = d / 2 … dn = 1. O(n2)
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π₯ΠΈΠ±Π±Π°Ρ€Π΄Π°: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° всСм ni β€” 1 <= n. O(n3/2)
  • Числа Π‘Π΅Π΄ΠΆΠ²ΠΈΠΊΠ° ...

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2) ΠΈΠ»ΠΈ O(n3/2).

Shell Sort Shell Sort

Counting Sort

Π’Π½Π°Ρ‡Π°Π»Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива подсчитываСтся количСство элСмСнтов, ΠΌΠ΅Π½ΡŒΡˆΠΈΡ…, Ρ‡Π΅ΠΌ ΠΎΠ½, ΠΈ Π½Π° основС этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт помСщаСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мСсто отсортированного массива.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2).

Counting Sort

Comb Sort

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° расчёской схоТа с сортировкой ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ. Основная идСя этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° β€” ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ малСнькиС значСния Π² ΠΊΠΎΠ½Ρ†Π΅ массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡ€Π°ΠΉΠ½Π΅ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ сортировку ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ (большиС значСния Π² Π½Π°Ρ‡Π°Π»Π΅ массива, Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ).

Π’ сортировкС ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° элСмСнта, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ (расстояниС Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°) Ρ€Π°Π²Π΅Π½ 1. Основная идСя сортировки расчёской Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС, Ρ‡Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: O(n2).

Comb Sort

Releases

No releases published

Packages

No packages published