Sortowanie przez wstawianie

Z Wikipedii, wolnej encyklopedii
Sortowanie przez wstawianie
Ilustracja
Przykład działania sortowania przez wstawianie
Rodzaj

Sortowanie

Struktura danych

Tablica, lista

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]

Przykład działania
  1. Utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego.
  2. Weź dowolny element ze zbioru nieposortowanego.
  3. 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.
  4. Wyciągnięty element wstaw w miejsce, gdzie skończyłeś porównywać.
  5. 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]

Bibliografia[edytuj | edytuj kod]

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Wprowadzenie do algorytmów. WNT, 2007.

Linki zewnętrzne[edytuj | edytuj kod]