Algorytmy: Algorytmy sortowania
Sortowanie bąbelkowe |
Sortowanie przez wstawianie |
Sortowanie przez wymianę |
Sortowanie przez zliczanie |
Sortowanie szybkie
Przedstawione tu algorytmy służą do sortowania niemalejącego tablicy jednowymiarowej (wektora danych), której wszystkie elementy są liczbami. Przy drobnych modyfikacjach można je wykorzystać do sortowania nierosnącego tablic o elementach nienumerycznych i/lub do sortowania tablic wielowymiarowych. Sortowanie bąbelkowe (ang. bubble sort)
Jest to chyba najprostszy i najbardziej popularny algorytm sortowania.
Sprawdzamy całą tablicę od początku do końca i jeżeli trafimy na parę elementów (liczb), w której większy poprzedza mniejszy, to zamieniamy je miejscami i zaczynamy przeszukiwać tablicę od początku. Czynność powtarzamy tak długo, aż podczas sprawdzania całej tablicy nie wystąpi ani jedna zamiana elementów. Realizujemy to najczęściej za pomocą zmiennej logicznej. Algorytm nosi nazwę bąbelkowego, gdyż największe liczby "wypływają" z dołu tablicy na jej szczyt. Jeżeli tablica wejściowa będzie posortowana, to algorytm wykona tylko jeden przebieg, co jest dużą zaletą tego sortowania, gdyż niektóre metody będą sortowały ciąg nawet jeśli będzie on już posortowany. Z kolei najgorszym zestawem danych dla tego algorytmu jest ciąg posortowany nierosnąco. Opis tego algorytmu można przedstawić następująco:
Sortowanie przez wstawianie (ang. insertion sort)
Zasada działania tego algorytmu jest często porównywana do porządkowania kart w wachlarz podczas czasie
gry: kolejne karty wstawiamy w odpowiednie miejsce, tzn. po młodszej, ale przed starszą. Podobnie jest z
liczbami. Schemat algorytmu wygląda następująco:
Sortowanie przez wymianę/wybór (ang. selection sort)
Metoda nazywana jest sortowaniem przez wymianę, gdyż polega na zamianie miejscami par elementów tablicy.
Na początku szukany jest najmniejszy element, a po znalezieniu go jest on zamieniany z pierwszym elementem tablicy. Następnie szukany jest znów najmniejszy element, ale począwszy od elementu drugiego (pierwszy - najmniejszy jest już wstawiony na odpowiednie miejsce), po jego znalezieniu jest on zamieniany z drugim elementem tablicy. Czynność tą powtarzamy na kolejnych elementach aż do n-tego. Schemat algorytmu wygląda następująco:
Sortowanie przez zliczanie (ang. counting sort)
Sortowanie przez zliczanie działa w czasie liniowym, a więc jest bardzo szybkie. Pozwala jednak tylko na
sortowanie liczb całkowitych.
Obie cechy wynikają ze sposobu sortowania. Polega ono na liczeniu, ile razy dana liczba występuje w ciągu, który mamy posortować. Następnie wystarczy utworzyć nowy ciąg, korzystając z danych zebranych wcześniej. Ten algorytm charakteryzują następujące cechy:
Schemat algorytmu wygląda następująco:
Sortowanie szybkie (ang. quick sort)
Jest to jeden z najpopularniejszych algorytmów sortowania. Algorytm sortowania szybkiego jest uważany
za najszybszy algorytm dla danych losowych oraz jest prosty do implementacji. W praktyce jest to
najszybszy algorytm sortowania dużych tablic danych oparty na rekurencji.
Sortowanie szybkie opiera się na technice "dziel i zwyciężaj". Wejściowa tablica jest dzielona (po przestawieniu niektórych z jej elementów) na dwie mniejsze. Każdy element pierwszej tablicy nie jest większy niż każdy element drugiej tablicy. Liczbę, według której dokonuje się podziału to najczęściej pierwszy element tablicy. Następnie dla tych dwóch podtablic wywoływany jest rekurencyjnie ten sam algorytm. Wywołania rekurencyjne kończą się, gdy któraś z kolejnych podtablic zawiera tylko jeden element. Ogólna idea szybkiego sortowania tablicy o N elementach wygląda tak:
Algorytm podziału na części polega na znajdywaniu par: (element > X) - (element < X) i zamianie ich miejscami. Najlepiej byłoby wybrać taki element dzielący X, który podzieli nasz ciąg na połowy. Nie opłaca się jednak zbyt długo szukać mediany z ciągu, dlatego często bierze się element pierwszy z brzegu.
|