Przeczytaj
Implementacja algorytmu sortowania przez wybieranie w języku Python
Napisz program sortującysortujący niemalejąco n
-elementową tablicę dane
, zawierającą liczby naturalne. W swojej implementacji wykorzystaj algorytm sortowania przez wybieranie. Przetestuj działanie programu dla następujących danych:
n = 7
dane = [5, 7, 86, 32, 64, 54, 2]
Specyfikacja problemu:
Dane:
n
– liczba naturalna dodatnia; rozmiar tablicydane
dane
–n
-elementowa tablica liczb naturalnych
Wynik:
Program wypisuje wszystkie elementy tablicy dane
, posortowane w kolejności niemalejącej.
Porównaj swoje rozwiązanie z przedstawionym w prezentacji.
Analiza złożoności czasowej i pamięciowej
Aby wyznaczyć złożoność czasową algorytmu sortowania przez wybieranie, przeanalizujmy liczbę operacji podstawowychoperacji podstawowych. Są nimi m.in. porównania i zamiany elementów.
Aby obliczyć liczbę porównań, zastanówmy się, ile razy wykona się wewnętrzna pętla w linii siódmej. W pierwszej iteracji wartość j
będzie przyjmować wartości: 1
, 2
, ..., n - 1
. Z każdą kolejną iteracją pętli zewnętrznej pętla wewnętrzna będzie wykonywać o jedną iterację mniej. Możemy zatem policzyć, że pętla ta będzie wykonywać się kolejno n - 1
, n - 2
, ..., 1
razy. Sumując wyrażenia za pomocą wzoru na sumę ciągu arytmetycznego, otrzymamy liczbę porównań równą . Liczba zamian jest równa . Złożoność czasowa algorytmu sortowania przez wybieranie jest zatem kwadratowa. W notacji wielkiego O będzie to złożoność czasowa .
Ćwiczenie 3 w sekcji „Sprawdź się” pozwoli na weryfikację tego wzoru.
Wyznaczenie złożoności pamięciowej opiera się na obserwacji, że nie używamy dodatkowej pamięci ponad stałą liczbę zmiennych i tablicę danych wejściowych. Jest ona stała, co w notacji wielkiego O zapisujemy jako . Algorytm sortowania przez wybieranie jest zatem algorytmem sortowania w miejscu.
Słownik
inaczej operacja dominująca; operacja wykonywana wielokrotnie, której nie możemy podzielić na mniejsze elementy; przykładem takich operacji są m.in. podstawowe operacje arytmetyczne (dodawanie, odejmowanie mnożenie, dzielenie), porównania czy inkrementacje
określa kryteria sortowania dla określonych danych
porządkowanie elementów zbioru ze względu na wybraną ich cechę (np. wiek, wysokość, kolejność alfabetyczną itp.)
struktura danych, której zadaniem jest przechowywanie w zorganizowany sposób zbioru danych tego samego typu, dostępnych za pomocą indeksu (klucza)