Sortowanie przez wstawianie
Szablon:Algorytm infobox 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 doceloweSzablon:Odn. Jest efektywny dla niewielkiej liczby elementów, jego złożoność wyrażona notacją wielkiego O wynosi Szablon:Odn. 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[1],
- jest wydajny dla zbiorów o niewielkiej liczebnościSzablon:Odn,
- jest stabilnySzablon:Odn.
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 [2].
Schemat działania algorytmuSzablon:Odn

- 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
Poniższy kod przedstawia algorytm zapisany w pseudokodzie, gdzieSzablon:Odn:
- 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