Insertion sort bere prvky jeden za druhým ze vstupní (nesetříděné) kolekce a zatřiďuje je (vkládá, proto insertion) na správnou pozici ve výstupní (setříděné) kolekci.
Dá se dělat i tzv. in-place, tj. v původní nesetříděné kolekci, ale názornější je, představíme-li si vstup jako jednu nesetříděnou dynamickou kolekci a výstup jako druhou dynamickou kolekci se stejnými prvky, ale tentokrát již setříděnou.
Předpokládejme, že třídíme od nejmenšího prvku po největší. Na začátku je nesetříděná kolekce "plná", zatímco ta setříděná je zatím prázdná. Jelikož jde o dynamické kolekce, podržíme se terminologie .NET-u a budeme kolekcím říkat seznamy.
Následující postup opakujeme v cyklu, dokud je v nesetříděném seznamu aspoň jeden prvek:
Add
).Insert
, tj. aktuální prvek vložíme na správnou pozici
a prvky, které už v seznamu jsou, počínaje prvkem na správné pozici, tím pádem "odsuneme" o jednu pozici dál (jejich indexy se zvětší o jedničku).
Poslední případ vyřešíme přidáním aktuálního prvku (metoda Add
) na konec seznamu.
Chceme např. setřídit takovouto kolekci čísel: 10, -5, 2, 0, 12, 1
Step 1: Inserting element 10 | ||||||
---|---|---|---|---|---|---|
UNSORTED part | 10 | -5 | 2 | 0 | 12 | 1 |
SORTED part | ||||||
Step 2: Element 10 inserted (added), inserting element -5 | ||||||
UNSORTED part | -5 | 2 | 0 | 12 | 1 | |
SORTED part | 10 | |||||
Step 3: Element -5 inserted, proceed with 2 | ||||||
UNSORTED part | 2 | 0 | 12 | 1 | ||
SORTED part | -5 | 10 | ||||
Step 4: Element 2 inserted, inserting 0 | ||||||
UNSORTED part | 0 | 12 | 1 | |||
SORTED part | -5 | 2 | 10 | |||
Step 5: Element 0 inserted, inserting 12 | ||||||
UNSORTED part | 12 | 1 | ||||
SORTED part | -5 | 0 | 2 | 10 | ||
Step 6: Element 12 inserted (added), inserting 1 | ||||||
UNSORTED part | 1 | |||||
SORTED part | -5 | 0 | 2 | 10 | 12 | |
Step 7: Element 1 inserted | ||||||
UNSORTED part | ||||||
SORTED part | -5 | 0 | 1 | 2 | 10 | 12 |
DONE |
Více informací: https://en.wikipedia.org/wiki/Insertion_sort