Sortowanie przez wstawianie
Przykład działania sortowania przez wstawianie | |
Rodzaj | |
---|---|
Struktura danych | |
Złożoność | |
Czasowa |
|
Pamięciowa |
|
Sortowanie przez wstawianie (ang. Insert Sort, Insertion Sort) – jeden z najprostszych algorytmów sortowania, którego zasada działania odzwierciedla sposób w jaki ludzie ustawiają karty – kolejne elementy wejściowe są ustawiane na odpowiednie miejsca docelowe[1]. Jest efektywny dla niewielkiej liczby elementów, jego złożoność wyrażona notacją wielkiego O wynosi [1]. Pomimo tego, że jest znacznie mniej wydajny od algorytmów takich jak quicksort czy heapsort, posiada pewne zalety:
- liczba wykonanych porównań jest zależna od liczby inwersji w permutacji, dlatego algorytm jest wydajny dla danych wstępnie posortowanych[2],
- jest wydajny dla zbiorów o niewielkiej liczebności[1],
- jest stabilny[1].
Istnieje modyfikacja algorytmu, pozwalająca zmniejszyć liczbę porównań. Zamiast za każdym razem iterować po już posortowanym fragmencie (etap wstawiania elementu), można posłużyć się wyszukiwaniem binarnym. Pozwala to zmniejszyć liczbę porównań do , nie zmienia się jednak złożoność algorytmu, ponieważ liczba przesunięć elementów to nadal [3].
Schemat działania algorytmu[1]
[edytuj | edytuj kod]- Utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego.
- Weź dowolny element ze zbioru nieposortowanego.
- Wyciągnięty element porównuj z kolejnymi elementami zbioru posortowanego, póki nie napotkasz elementu równego lub elementu większego (jeśli chcemy otrzymać ciąg niemalejący) lub nie znajdziemy się na początku/końcu zbioru uporządkowanego.
- Wyciągnięty element wstaw w miejsce, gdzie skończyłeś porównywać.
- Jeśli zbiór elementów nieuporządkowanych jest niepusty, wróć do punktu 2.
Algorytm – pseudokod
[edytuj | edytuj kod]Poniższy kod przedstawia algorytm zapisany w pseudokodzie, gdzie[4]:
- A – tablica danych przeznaczonych do posortowania (indeksowana od 1 do n),
- n – liczba elementów w tablicy A.
Insert_sort(A, n):
for i=2 to n:
# Wstaw A[i] w posortowany ciąg A[1 ... i-1]
wstawiany_element = A[i]
j = i - 1
while j > 0 and A[j] > wstawiany_element:
A[j + 1] = A[j]
j = j - 1
A[j + 1] = wstawiany_element
Przykłady implementacji
[edytuj | edytuj kod]Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ a b c d e Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein ↓, s. 23.
- ↑ Sortowanie przez wstawianie | Informatyka MIMUW [online], smurf.mimuw.edu.pl [dostęp 2016-01-22] .
- ↑ Algorytmy i struktury danych/Sortowanie: MergeSort, HeapSort i QuickSort - Studia Informatyczne
- ↑ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein ↓, s. 23-24.
Bibliografia
[edytuj | edytuj kod]- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Wprowadzenie do algorytmów. WNT, 2007.