Úvod do algoritmu řazení vložení

Úvod do algoritmu řazení vložení

Insertion Sort je technika, která funguje tak, že využívá seřazený dílčí seznam a průběžně do něj přidává hodnotu z netříděného seznamu, dokud není celý seznam seřazen.





Algoritmus začíná první položkou seznamu jako seřazeným podseznamem. Poté porovná další číslo s prvním. Pokud je větší, vloží se do prvního indexu. Jinak je ponechán ve svém indexu.





Třetí hodnota je poté porovnána s dalšími dvěma a poté vložena do správného indexu. Tento proces pokračuje, dokud není seřazen celý seznam.





Bližší pohled na třídění vložení

Výše uvedený popis vám možná nedal smysl. Příklad by vám měl pomoci mnohem lépe porozumět.

Předpokládejme, že máte seznam: [39, 6, 2, 51, 30, 42, 7].



Algoritmus identifikuje 39 jako první hodnotu seřazeného sublistu. Vyhodnocení pak přejde na druhou pozici.

Související: Dynamické programování: Příklady, běžné problémy a řešení





6 je pak porovnáno s 39. Protože 6 je menší než 39, 6 je vloženo do první polohy a 39 do druhé. Nové pořadí seznamu je po prvním průchodu nyní:

[6, 39, 2, 51, 30, 42, 7]





Hodnocení se nyní přesouvá na třetí pozici. 2 je porovnáno s posledními dvěma čísly a poté vloženo do správné polohy. Nové pořadí seznamu je po druhém průchodu nyní:

[2, 6, 39, 51, 30, 42, 7]

Pro třetí průchod je pořadí seznamu:

[2, 6, 39, 51, 30, 42, 7]

Proces se opakuje, dokud není seřazen celý seznam.

Viz níže uvedený diagram, který shrnuje tyto operace:

Algoritmická analýza

Časová složitost vloženého řazení je O (n2), stejně jako bublinkové řazení . Počet srovnání v nejhorším případě je součet všech celých čísel od 1 do (n-1), což dává kvadratický součet.

Implementace kódu

Níže uvedený kód Pythonu a Javy ukazuje, jak můžete implementovat metodu třídění vložení.

Krajta:

def insertionSort(mylist):
for step in range(1, len(mylist)):
current_element = mylist[step]
position = step
while position > 0 and mylist[position - 1] > current_element:
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = current_element

Jáva:

void insertionSort(int[] myarray) {
int n = myarray.length;
for (int x = 1; x int key = myarray[x];
int y = x-1;
while ( (y > -1) && ( myarray [y] > key ) ) {
myarray [y+1] = myarray [y];
y--;
}
myarray[y+1] = key;
}
}

Lepší kódování s pseudokódem

Výše uvedené příklady kódu byly uvedeny bez jakéhokoli pseudokódu, na který můžete odkazovat při psaní tohoto algoritmu v jiných jazycích. Většina programátorů (včetně autora) ráda běží na své klávesnice poté, co jim bylo řečeno 'šeptem' o tom, jak program funguje.

Tento přístup je bohužel náchylný k chybám, protože logika programu se komplikuje. Jak byste chtěli vylepšit svoji programovací hru tím, že se naučíte používat pseudokód?

Podíl Podíl tweet E-mailem Co je to pseudokód a jak z vás dělá lepšího vývojáře?

Bojujete se naučit programovat? Naučte se pracovat s kódem tím, že se naučíte pseudokód. Co je to však pseudokód a může skutečně pomoci?

Číst dále
Související témata
  • Programování
  • Jáva
  • Krajta
  • Návody na kódování
O autorovi Jerome Davidson(22 článků zveřejněno)

Jerome je spisovatelem štábu v MakeUseOf. Zabývá se články o programování a Linuxu. Je také nadšencem do kryptoměny a vždy má přehled o krypto průmyslu.

jak udělat narozeninový filtr na snapchatu
Více od Jerome Davidsona

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru