RGSH2COVRALS1
Zdjęcie przedstawia stertę kolorowych klocków lego.

PYI_R_W14_M26 Sortowanie przez scalanie

Źródło: Xavi Cabrera, domena publiczna.

Scalanie posortowanych tablic

Sortowanie przez scalanie polega na podzieleniu sortowanej struktury danych na dwie części, następnie na rekurencyjnym sortowaniu każdej z tych części i ponownym scaleniu już posortowanych części w jedną całość. Warto wiedzieć, że jako pierwszy tę metodę opisał John von Neumann, znany jako twórca m.in. teorii gier oraz koncepcji automatów komórkowych. Algorytm sortowania przez scalanie oparty jest na metodzie dziel i zwyciężaj.

Wyobraźmy sobie, że mamy dwie półki, każda z losową liczbą książek. Książki na półkach ułożone są w kolejności alfabetycznej. Naszym celem jest ułożenie wszystkich książek na trzeciej półce, w kolejności alfabetycznej. By to zrobić, porównujemy ze sobą pierwszą książkę z półki nr 1 z pierwszą książką na półce nr 2. Książka z literą położoną wcześniej w alfabecie, zostaje przeniesiona na trzecią półkę. Czynność powtarzamy, porównując książki, które ułożone są jako pierwsze na półkach. W momencie, gdy skończą nam się książki na jednej z półek, resztę książek z drugiej półki po prostu przenosimy na koniec naszej trzeciej, dodatkowej półki. Aby lepiej zrozumieć algorytm scalania książek na półkach, przeanalizuj rysunek.

R76MT71HDA6XZ
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Etapy sortowania przez scalanie

Chcemy uporządkować niemalejąco n-elementową tablicę liczb całkowitych. W jaki sposób to zrobić, korzystając z metody sortowania przez scalanie?

Aby użyć omówionego wcześniej algorytmu scalania, musimy podzielić tablicę na mniejsze, same w sobie posortowane tablice. W tym celu tablicę dzielimy na pół – jeżeli liczba elementów jest nieparzysta, pierwsza tablica będzie miała jeden element więcej.

Proces powtarzamy do momentu, w którym osiągniemy tablice jednoelementowe.  Wiemy, że tablica posiadająca jeden element już jest posortowana. Dzięki temu możemy scalić dwie tablice jednoelementowe i uzyskać kolejną, posortowaną dwuelementową tablice. Następnie możemy scalić dwie posortowane tablice dwuelementowe, aby uzyskać czteroelementową itd. Przejdźmy do rysunku przedstawiającego kolejne etapy sortowania przez scalanie na podstawie przykładowej tablicy.

R1PK5BE76H75Q
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

dziel i zwyciężaj
dziel i zwyciężaj

metoda, która polega na podzieleniu problemu na mniejsze, podobne problemy, znalezieniu ich rozwiązań, a następnie ponownym połączeniu ich w jedną całość, by otrzymać rozwiązanie całego problemu

John von Neumann
John von Neumann

węgierski matematyk, chemik, fizyk i informatyk; jest uznawany za głównego twórcę teorii gier i formalizmu matematycznego mechaniki kwantowej

przypadek podstawowy
przypadek podstawowy

przypadek, dla którego funkcja rekurencyjna nie wywołuje samej siebie, a zamiast tego zwraca z góry określoną wartość

rekurencja
rekurencja

sytuacja, w której funkcja wywołuje samą siebie, aż do napotkania przypadku podstawowego

sortowanie w miejscu
sortowanie w miejscu

tzw. in situ; algorytm, który do posortowania zbioru danych potrzebuje stałej ilości pamięci komputera, niezależnej od rozmiaru danych wejściowych; wszelkie potrzebne do otrzymania wyniku obliczenia są wykonywane w pamięci, w której znajdują się dane

złożoność czasowa
złożoność czasowa

cecha algorytmu, która wyraża czas niezbędny do wykonania danego algorytmu dla konkretnych danych, podana jako funkcja rozmiaru tych danych wejściowych; zazwyczaj rozpatruje się liczbę operacji podstawowych (dominujących), w przypadku sortowania najczęściej jest to operacja porównania wartości dwóch elementów, można też przyjąć operację przestawiania elementów

koncepcja automatów komórkowych
koncepcja automatów komórkowych

polega na zastąpieniu zbioru skomplikowanych równań opisujących zachowanie się wielu układów fizycznych, systemem komórek sąsiadujących ze sobą według pewnego ustalonego wzorca