Skip to content

bleeeana/merge_sort

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 

Repository files navigation

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

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки слияниСм Π½Π° Python для сортировки ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΏΠΎ суммС ΠΈΡ… Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов.

ОписаниС

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм β€” это эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ "раздСляй ΠΈ властвуй". Алгоритм Π΄Π΅Π»ΠΈΡ‚ массив ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, рСкурсивно сортируСт ΠΎΠ±Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… Π² отсортированный массив.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

  1. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅: Массив дСлится ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ Π½Π° Π΄Π²Π΅ части
  2. РСкурсия: КаТдая ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° рСкурсивно сортируСтся
  3. БлияниС: ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ отсортированный массив

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сортировки ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΏΠΎ суммС ΠΈΡ… Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ:

  • Класс Matrix создаСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈ вычисляСт сумму Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов
  • Ѐункция merge_sort Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ сортировку слияниСм
  • Ѐункция merge_two_lists ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΄Π²Π° отсортированных списка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

  • Π›ΡƒΡ‡ΡˆΠΈΠΉ случай: O(n log n)
  • Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ случай: O(n log n)
  • Π₯ΡƒΠ΄ΡˆΠΈΠΉ случай: O(n log n)

Алгоритм всСгда ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n log n), Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ прСдсказуСмым ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

O(n) β€” трСбуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… массивов ΠΏΡ€ΠΈ слиянии

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • Гарантированная врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n log n)
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ (сохраняСт ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ порядок Ρ€Π°Π²Π½Ρ‹Ρ… элСмСнтов)
  • Π₯ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большими массивами
  • ΠŸΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

НСдостатки

  • Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти O(n)
  • НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ "Π½Π° мСстС" (in-place)
  • ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ быстрая сортировка для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов

ИспользованиС

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄:

  1. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† k
  2. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:
    • Π Π°Π·ΠΌΠ΅Ρ€ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (построчно)

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ индСксы ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, отсортированных ΠΏΠΎ суммС ΠΈΡ… Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°:

3
3
1 2 3
4 5 6
7 8 9
2
10 20
30 40
2
1 1
1 1

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

0
1
2
0 1 2

ВрСбования

  • Python 3.x

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠ΄Π°

  • Matrix β€” класс для прСдставлСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с вычислСниСм суммы Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ
  • merge_sort(arr) β€” рСкурсивная функция сортировки слияниСм
  • merge_two_lists(a, b) β€” функция объСдинСния Π΄Π²ΡƒΡ… отсортированных списков
  • main() β€” основная функция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Автор

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ создан Π² Ρ€Π°ΠΌΠΊΠ°Ρ… изучСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки ст. Π‘ΠΎΠ±ΠΊΠΎΠ²Ρ‹ΠΌ Владиславом Π”ΠΌΠΈΡ‚Ρ€ΠΈΠ΅Π²ΠΈΡ‡Π΅ΠΌ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages