Podstawowe algorytmy

Na stronach tych omówione są najciekawsze algorytmy omawiane na wykładzie ze Wstępu do Informatyki na pierwszym roku studiów informatycznych na Wydziale PPT Pwr.

O sortowaniu przez scalanie nie ma mądrych cytatów w internecie

- nikt

Sortowanie przez scalanie

Rekurencyjny algorytm sortowania danych, stosujący metodę dziel i zwyciężaj. Odkrycie algorytmu przypisuje się Johnowi von Neumannowi.

Wyróżnić można trzy podstawowe kroki.

  1. Podziel zestaw danych na dwie równe części,
  2. Zastosuj sortowanie przez scalanie dla każdej z nich oddzielnie, chyba że pozostał już tylko jeden element,
  3. Połącz posortowane podciągi w jeden.

Szczególnie jest przydatny zwłaszcza przy danych dostępnych sekwencyjnie (po kolei, jeden element naraz), na przykład w postaci listy jednokierunkowej (tj. łączonej jednostronnie) albo pliku sekwencyjnego.

Złożoność obliczeniowa

  1. Pierwszy krok (podział) trwa zawsze stały czas, niezależnie od rozmiaru tablicy - $ \theta ( 1 ) $
  2. Drugi krok (scalanie podtablic) trwa logarytmicznie długo w stosunku do rozmiaru tablicy - $ \theta( \log( n ) ) $
  3. Ostatni krok trwa liniowo długo w stosunku do rozmiaru tablicy - $ \theta( n ) $

Całkowita złożoność obliczeniowa sortowania przez scalanie:
$$ T(n) = \theta( n\log(n) ) $$

Kod funkcji Merge-Sort

Pseudo-kod funkcji

SORT-SCAL(T, p, r): JEŚLI p < r: q → (p+r)/2 SORT-SCAL(T, p, q) SORT-SCAL(T, q+1, r) SCALANIE(T, p, q, r)

JavaScript

function mergeSort( arr ) { if( arr.length < 2 ) { return arr; } var mid = Math.floor( arr.length / 2 ); var subLeft = mergeSort( arr.slice( 0, mid ) ); var subRight = mergeSort( arr.slice( mid ) ); return merge( subLeft, subRight ); } function merge( a, b ) { var result = []; while( a.length > 0 && b.length > 0 ) { result.push( a[0] < b[0] ? a.shift() : b.shift() ); } return result.concat( a.length ? a : b ); }

Sortowanie przez scalanie

Wprowadź liczby całkowite oddzielone spacją i naciśnij przycisk "Posortuj".




Posortuj

Wynik

Krok po kroku

Licznik wizyt: 2

Oceń stronę: lub

Pozytywne: 0 | Negatywne: 0 | Wynik: 0