Algorytmy porządkowania
Sortowanie
Sortowaniem nazywamy porządkowanie elementów w pewien ustalony sposób.
Istnieje wiele metod sortowania, różniących się zarówno sposobem działania, jak i efektywnością. W związku z tym algorytmy sortujące, w zależności od swojej złożoności algorytmicznej, różnią się czasem rozwiązywania danego problemu. W tym e‑materiale poznamy jeden z najprostszych algorytmów sortowania – przez wybieranie (wybór). W ten sposób sortować możemy np. wydania czasopism (chronologicznie), książki (alfabetycznie) etc.
Do czego służy sortowanie?
Sortowanie to inaczej porządkowanie danych uwzględniające jakąś ich cechę. Jeżeli sortujemy liczby, taką cechą jest zazwyczaj ich wartość, więc sortujemy je rosnąco, nierosnąco, malejąco oraz niemalejąco. Sortować możemy nie tylko liczby, ale również litery czy ciągi znaków.
Sortowanie przez wybieranie
Metoda sortowania przez wybieranie w porządku rosnącym polega na znalezieniu najmniejszego elementu zbioru i umieszczeniu go na pierwszym miejscu. Obiekt, który się tam wcześniej znajdował, trafia na miejsce zajmowane dotychczas przez element o najmniejszej wartości klucza.
Następnie wśród pozostałych (jeszcze nieposortowanych) elementów znowu wyszukuje się ten o najmniejszej wartości klucza i umieszcza go na drugim miejscu (ponownie dokonując zamiany z dotychczasowym obiektem) itd.
W każdym cyklu zmniejsza się liczba nieposortowanych elementów. Opisane czynności wykonuje się aż do momentu, w którym pozostanie tylko jeden element w części nieposortowanej – na pewno wartość jego klucza jest największa w całym zbiorze.
Kiedy sortujemy tablicę malejąco, rozpoczynamy od znalezienia elementu największego. Zamieniamy go miejscami z elementem, który znajdował się na pierwszej pozycji.
Kolorem zielonym zaznaczono miejsce przeznaczone dla pierwszego elementu. Ponieważ sortujemy zbiór malejąco, powinna się tu znaleźć największa liczba.

Jest nią zaznaczony kolorem czerwonym element o wartości 9. Zamieniamy go miejscami z będącą na pierwszej pozycji liczbą 5.

Na razie umieściliśmy jeden element we właściwym miejscu. Elementy już posortowane oznaczymy barwą żółtą. Teraz musimy znaleźć obiekt o największej wartości klucza w nieposortowanej części i zamienić go miejscami z liczbą 2 (pole to ma obecnie barwę zieloną).

Element o wartości 8 zamieniamy miejscami z liczbą 2. Rozpoczynamy szukanie wartości, która powinna znaleźć się na trzeciej pozycji.


Cały proces trwa aż do odnalezienia przedostatniego elementu. Ostatnia wartość na pewno jest najmniejsza:

Sortowanie przez zliczanie
Algorytm sortowania przez zliczanie polega na zliczeniu wystąpień kluczykluczy w danym zbiorzezbiorze. W przypadku tego typu sortowania domyślnie operujemy na samych liczbach, choć po dostosowaniu algorytmu możliwe jest również sortowanie znaków.
Za pomocą omawianego algorytmu nie można posortować liczb rzeczywistych. Wynika to z faktu, że pomiędzy dwiema dowolnymi liczbami całkowitymi występuje nieskończenie wiele liczb rzeczywistych.
Warto również podkreślić, że algorytm sortowania przez zliczanie może być używany dla zbiorów, w których znajdują się liczby ujemne.
Omówmy algorytm na przykładzie.
Załóżmy, że chcemy niemalejąco posortować następujący zbiór danych:
{ 2, 7, 5, 2, 3, 9, 1, 2, 1, 5, 1, 9, 4, 8, 7 }.
Jego największa wartość to , a najmniejsza to . Dla tego zbioru k (różnica między wartością maksymalną a minimalną powiększoną o ) wynosi 9 - 1 + 1 = 9, zatem k = 9.
Dodajemy liczbę , aby uwzględnić wszystkie możliwe wartości w zbiorze elementów – również najmniejszą oraz największą.
Tworzymy zatem dziewięcioelementową tablicę pomocniczą, którą wypełnimy zerami – dla każdej wartości w zbiorze przygotujemy licznik, a jego wartość ustawimy na .
Dla czytelności przedstawimy to w formie tabeli.
indeks elementu zbioru | element zbioru | licznik |
|---|---|---|
0 | 1 | 0 |
1 | 2 | 0 |
2 | 3 | 0 |
3 | 4 | 0 |
4 | 5 | 0 |
5 | 6 | 0 |
6 | 7 | 0 |
7 | 8 | 0 |
8 | 9 | 0 |
Sprawdzamy elementy zbioru. W następnym kroku zliczamy ich wystąpienia w odpowiednich licznikach, np.: zliczenie elementu o wartości powoduje zwiększenie o wartości licznika elementu o indeksie , a zliczenie elementu o wartości powoduje zwiększenie o wartości licznika elementu o indeksie .
W poszczególnych licznikach znajdują się liczby wystąpień każdej wartości.
W zbiorze znajdują się trzy elementy o wartości :
{ 2, 7, 5, 2, 3, 9, 1, 2, 1, 5, 1, 9, 4, 8, 7 }
W kolumnie licznik wpisujemy zatem wartość dla wiersza, w którym zliczamy liczbę wystąpień elementu zbioru o wartości . Podobnie postępujemy w przypadku pozostałych elementów zbioru.
Dla podanego przykładu tabela zliczeń wygląda następująco:
indeks elementu zbioru | element zbioru | licznik |
|---|---|---|
0 | 1 | 3 |
1 | 2 | 3 |
2 | 3 | 1 |
3 | 4 | 1 |
4 | 5 | 2 |
5 | 6 | 0 |
6 | 7 | 2 |
7 | 8 | 1 |
8 | 9 | 2 |
W następnym kroku, zaczynając od drugiego licznika, sumujemy zawartość danego licznika oraz jego poprzednika. Dzięki tej operacji dokładnie wiemy, gdzie w tablicy wynikowej umieścić każdy z elementów tablicy wejściowej.
Gdy zliczamy wystąpienia poszczególnych liczb w tablicy wejściowej, otrzymujemy tablicę, która mówi nam, ile razy występuje każda liczba. Jednak aby posortować tablicę wejściową, potrzebujemy wiedzieć, gdzie dokładnie umieścić każdy element w tablicy wynikowej.
Sumując wartość licznika z jego poprzednikiem, przekształcamy tablicę pomocniczą w taki sposób, że każda wartość w tej tablicy będzie przechowywać informację, ile elementów o wartości mniejszej lub równej danej liczbie znajduje się w tablicy wejściowej.
W zaprezentowanej tabeli możemy zobaczyć, ile liczb mniejszych lub równych danej wartości (kolumna element zbioru) znajduje się w zbiorze (kolumna licznik).
indeks elementu zbioru | element zbioru | licznik |
|---|---|---|
0 | 1 | 3 |
1 | 2 | 6 |
2 | 3 | 7 |
3 | 4 | 8 |
4 | 5 | 10 |
5 | 6 | 10 |
6 | 7 | 12 |
7 | 8 | 13 |
8 | 9 | 15 |
Zatem w zbiorze wejściowym znajdują się trzy wartości równe lub mniejsze od . Oznacza to, że w posortowanej tablicy liczby mniejsze niż lub równe zajmują trzy pierwsze miejsca (czyli indeksy od do włącznie). Wiedząc to, możemy umieścić wszystkie elementy o wartości na odpowiednich miejscach tablicy wynikowej.
Oto posortowany zbiór danych:
{ 1, 1, 1, 2, 2, 2, 3, 4, 5, 5, 7, 7, 8, 9, 9 }
Sprawdź swoją wiedzę, biorąc udział w grze.
Sortowanie przez wybór
Zastanów się, które pytania sprawiły ci trudność. Wróć do fragmentów materiału, których te pytania dotyczą.
Słownik
cecha, atrybut, wartość jednoznacznie identyfikująca uporządkowany ciąg wartości i pozwalająca na jednoznaczne rozpoznanie elementu w zbiorze
pojęcie aksjomatyczne; zbiór jest jednoznacznie wyznaczonym przez swoją zawartość obiektem matematycznym