7.1 Definicja sortowania przez wybór
Sortowanie przez wybór (Selection Sort) — to algorytm sortowania, który znajduje najmniejszy element z nieposortowanej części tablicy i zamienia go z pierwszym elementem tej części. Proces powtarza się dla pozostałych elementów, aż cała tablica zostanie posortowana.
Zasada działania:
- Zaczynamy od pierwszego elementu tablicy.
- Znajdujemy najmniejszy element w pozostałej nieposortowanej części tablicy.
- Zamieniamy miejscami najmniejszy element i pierwszy element nieposortowanej części.
- Powtarzamy proces dla następnego elementu, aż cała tablica zostanie posortowana.
Proces krok po kroku
- Znajdujemy najmniejszy element w tablicy i zamieniamy go z pierwszym elementem.
- Powtarzamy proces dla pozostałej tablicy (zaczynając od drugiego elementu).
- Kontynuujemy proces, aż cała tablica zostanie posortowana.

Składność czasowa i pamięciowa sortowania przez wybór
Składność czasowa:
- W najgorszym przypadku:
O(n^2)
— dzieje się, gdy elementy są początkowo uporządkowane w odwrotnej kolejności lub losowo. - W przeciętnym przypadku:
O(n^2)
— dzieje się dla losowego rozmieszczenia elementów. - W najlepszym przypadku:
O(n^2)
— nawet jeśli tablica jest już posortowana, algorytm i tak wykonuje te same porównania.
Składność pamięciowa:
O(1)
— ponieważ algorytm używa stałej ilości dodatkowej pamięci (tylko kilka zmiennych do przechowywania czasowych wartości).
7.2 Implementacja algorytmu sortowania przez wybór
Implementacja algorytmu jest bardzo prosta:
Krok 1: znajdujemy minimalny element wśród wszystkich elementów i zamieniamy go z pierwszym.
Krok 2: znajdujemy minimalny element wśród wszystkich elementów, oprócz pierwszego, i zamieniamy go z drugim.
Krok 3: znajdujemy minimalny element wśród wszystkich elementów, oprócz pierwszego i drugiego, i zamieniamy go z trzecim.
Implementacja w Python:
def selection_sort(arr):
n = len(arr)
for i in range(n):
# Znajdujemy minimalny element w pozostałej nieposortowanej części tablicy min_idx = i for j in range(i + 1, n): if arr[j] < arr[min_idx]: min_idx = j
# Zamieniamy znaleziony minimalny element z pierwszym elementem nieposortowanej części arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr # Zwracamy posortowaną tablicę
# Przykład użycia:
arr = [64, 25, 12, 22, 11]
sorted_arr = selection_sort(arr)
print("Posortowana tablica:", sorted_arr)
# Wyjście: Posortowana tablica: [11, 12, 22, 25, 64]
Przykład działania algorytmu:
- Pierwsze przejście
(i = 0)
:- Znajdujemy minimalny element (11) w nieposortowanej części tablicy [64, 25, 12, 22, 11].
- Zamieniamy 11 z 64.
- Tablica: [11, 25, 12, 22, 64]
- Drugie przejście
(i = 1)
:- Znajdujemy minimalny element (12) w nieposortowanej części tablicy [25, 12, 22, 64].
- Zamieniamy 12 z 25.
- Tablica: [11, 12, 25, 22, 64]
- Trzecie przejście
(i = 2)
:- Znajdujemy minimalny element (22) w nieposortowanej części tablicy [25, 22, 64].
- Zamieniamy 22 z 25.
- Tablica: [11, 12, 22, 25, 64]
- Czwarte przejście
(i = 3)
:- Znajdujemy minimalny element (25) w nieposortowanej części tablicy [25, 64].
- 25 już na swoim miejscu, wymiana nie jest potrzebna.
- Tablica: [11, 12, 22, 25, 64]
Algorytm kończy się, ponieważ wszystkie elementy są posortowane.
GO TO FULL VERSION