Co je Selection Seřadit?
VÝBĚR TŘÍDĚNÍ je srovnávací algoritmus řazení, který se používá k řazení náhodného seznamu položek ve vzestupném pořadí. Porovnání nevyžaduje mnoho dalšího prostoru. Vyžaduje pouze jeden další paměťový prostor pro dočasnou proměnnou.
Toto se označuje jako třídění na místě . Třídění výběru má časovou složitost O (n 2 ), kde n je celkový počet položek v seznamu. Časová složitost měří počet iterací potřebných k seřazení seznamu. Seznam je rozdělen do dvou oddílů: První seznam obsahuje seřazené položky, zatímco druhý seznam obsahuje netříděné položky.
Ve výchozím nastavení je seřazený seznam prázdný a netříděný seznam obsahuje všechny prvky. Neroztříděný seznam se poté prohledá na minimální hodnotu, která se poté umístí do seřazeného seznamu. Tento proces se opakuje, dokud nejsou všechny hodnoty porovnány a tříděny.
V tomto výukovém programu Algoritmus se naučíte:
- Co je Selection Seřadit?
- Jak funguje výběrové třídění?
- Definice problému
- Řešení (Algoritmus)
- Vizuální reprezentace
- Program pro výběr výběru pomocí Pythonu 3
- Vysvětlení kódu
- Časová složitost výběru Seřadit
- Kdy použít výběr řazení?
- Výhody výběru Seřadit
- Nevýhody výběru Seřadit
Jak funguje výběrové třídění?
První položka v netříděném oddílu se porovná se všemi hodnotami na pravé straně, aby se zkontrolovalo, zda se jedná o minimální hodnotu. Pokud to není minimální hodnota, pak je její poloha zaměněna s minimální hodnotou.
Příklad:
- Například pokud je index minimální hodnoty 3, pak je hodnota prvku s indexem 3 umístěna na indexu 0, zatímco hodnota, která byla na indexu 0, je umístěna na indexu 3. Pokud je první prvek v netříděném oddílu minimální hodnotu, pak vrátí své pozice.
- Prvek, který byl určen jako minimální hodnota, se poté přesune do oddílu na levé straně, což je seřazený seznam.
- Rozdělená strana má nyní jeden prvek, zatímco nerozdělená strana má (n - 1) prvků, kde n je celkový počet prvků v seznamu. Tento proces se opakuje znovu a znovu, dokud nebudou všechny položky porovnány a tříděny na základě jejich hodnot.
Definice problému
Seznam prvků, které jsou v náhodném pořadí, je třeba seřadit vzestupně. Zvažte následující seznam jako příklad.
[21,6,9,33,3]
Výše uvedený seznam je třeba seřadit, aby se dosáhlo následujících výsledků
[3,6,9,21,33]
Řešení (Algoritmus)
Krok 1) Získejte hodnotu n, což je celková velikost pole
Krok 2) Rozdělte seznam do seřazených a netříděných sekcí. Seřazený oddíl je zpočátku prázdný, zatímco netříděný oddíl obsahuje celý seznam
Krok 3) Vyberte minimální hodnotu z nerozdělené sekce a umístěte ji do seřazené sekce.
Krok 4) Opakujte postup (n - 1) krát, dokud nebudou tříděny všechny prvky v seznamu.
Vizuální reprezentace
Vzhledem k seznamu pěti prvků následující obrázky ilustrují, jak algoritmus výběru řazení iteruje hodnotami při jejich třídění.
Následující obrázek ukazuje netříděný seznam
Krok 1)
První hodnota 21 se porovná se zbytkem hodnot, aby se zkontrolovalo, zda se jedná o minimální hodnotu.
3 je minimální hodnota, takže pozice 21 a 3 jsou zaměněny. Hodnoty se zeleným pozadím představují seřazený oddíl seznamu.
Krok 2)
Hodnota 6, která je prvním prvkem v netříděném oddílu, se porovná se zbytkem hodnot, aby se zjistilo, zda existuje nižší hodnota
Hodnota 6 je minimální hodnota, takže si udržuje svoji pozici.
Krok 3)
První prvek v netříděném seznamu s hodnotou 9 se porovná se zbytkem hodnot, aby se zkontrolovalo, zda se jedná o minimální hodnotu.
Hodnota 9 je minimální hodnota, takže si udržuje svoji pozici v seřazeném oddílu.
Krok 4)
Hodnota 33 je porovnána se zbytkem hodnot.
Hodnota 21 je nižší než 33, takže pozice jsou zaměněny, aby se vytvořil výše uvedený nový seznam.
Krok 5)
V nerozděleném seznamu nám zbývá pouze jedna hodnota. Proto je již tříděno.
Konečný seznam je jako ten, který je zobrazen na obrázku výše.
Program pro výběr výběru pomocí Pythonu 3
Následující kód ukazuje implementaci řazení výběru pomocí Pythonu 3
def selectionSort( itemsList ):n = len( itemsList )for i in range( n - 1 ):minValueIndex = ifor j in range( i + 1, n ):if itemsList[j] < itemsList[minValueIndex] :minValueIndex = jif minValueIndex != i :temp = itemsList[i]itemsList[i] = itemsList[minValueIndex]itemsList[minValueIndex] = tempreturn itemsListel = [21,6,9,33,3]print(selectionSort(el))
Spuštěním výše uvedeného kódu získáte následující výsledky
[3, 6, 9, 21, 33]
Vysvětlení kódu
Vysvětlení kódu je následující
Zde je vysvětlení kódu:
- Definuje funkci s názvem selectionSort
- Získá celkový počet prvků v seznamu. Potřebujeme to k určení počtu průchodů, které je třeba provést při porovnávání hodnot.
- Vnější smyčka. Používá smyčku k iteraci hodnotami seznamu. Počet iterací je (n - 1). Hodnota n je 5, takže (5 - 1) nám dává 4. To znamená, že vnější iterace budou provedeny 4krát. V každé iteraci je hodnota proměnné i přiřazena proměnné minValueIndex
- Vnitřní smyčka. Použije smyčku k porovnání hodnoty zcela vlevo s ostatními hodnotami na pravé straně. Hodnota j však nezačíná na indexu 0. Začíná na (i + 1). To vylučuje hodnoty, které již byly tříděny, takže se zaměřujeme na položky, které ještě nebyly tříděny.
- Najde minimální hodnotu v netříděném seznamu a umístí ji na správné místo
- Aktualizuje hodnotu minValueIndex, když je podmínka výměny pravdivá
- Porovná hodnoty indexových čísel minValueIndex a i a zjistí, zda se nerovnají
- Hodnota zcela vlevo je uložena v časové proměnné
- Nižší hodnota z pravé strany zaujímá pozici první pozice
- Hodnota, která byla uložena v časové hodnotě, je uložena na pozici, která byla dříve držena minimální hodnotou
- Vrátí seřazený seznam jako výsledek funkce
- Vytvoří seznam el, který má náhodná čísla
- Vytiskněte seřazený seznam po vyvolání funkce výběru, která předá el jako parametr.
Časová složitost výběru Seřadit
Složitost řazení se používá k vyjádření počtu časů provedení potřebných k seřazení seznamu. Implementace má dvě smyčky.
Vnější smyčka, která postupně vybírá hodnoty ze seznamu, se provede nkrát, kde n je celkový počet hodnot v seznamu.
Vnitřní smyčka, která porovnává hodnotu z vnější smyčky se zbytkem hodnot, je také provedena nkrát, kde n je celkový počet prvků v seznamu.
Proto je počet poprav (n * n), který lze také vyjádřit jako O (n 2 ).
Výběr má tři kategorie složitosti;
- Nejhorší případ - v tomto případě je uvedený seznam sestupně. Algoritmus provádí maximální počet provedení, který je vyjádřen jako [Big-O] O (n 2 )
- Nejlepší případ - k tomu dojde, když je poskytnutý seznam již seřazen. Algoritmus provádí minimální počet provedení, který je vyjádřen jako [Big-Omega] Ω (n 2 )
- Průměrný případ - k tomu dojde, když je seznam v náhodném pořadí. Průměrná složitost je vyjádřena jako [Big-theta] ⊝ (n 2 )
Třídění výběru má prostorovou složitost O (1), protože vyžaduje jednu dočasnou proměnnou použitou pro výměnu hodnot.
Kdy použít výběr řazení?
Třídění výběru se nejlépe používá, když chcete:
- Musíte seřadit vzestupně malý seznam položek
- Když jsou náklady na výměnu hodnot zanedbatelné
- Používá se také v případě, že potřebujete zajistit, aby byly zkontrolovány všechny hodnoty v seznamu.
Výhody výběru Seřadit
Výhody výběru jsou následující
- Na malých seznamech funguje velmi dobře
- Jedná se o algoritmus na místě. To nevyžaduje mnoho místa pro třídění. K uložení časové proměnné je zapotřebí pouze jeden další prostor.
- Funguje dobře u položek, které již byly tříděny.
Nevýhody výběru Seřadit
Níže jsou uvedeny nevýhody řazení výběru.
- Při práci na obrovských seznamech si vede špatně.
- Počet iterací provedených během třídění je n-na druhou, kde n je celkový počet prvků v seznamu.
- Jiné algoritmy, například quicksort, mají ve srovnání s výběrem lepší výkon.
Souhrn:
- Třídění výběru je algoritmus porovnávání na místě, který se používá k řazení náhodného seznamu do uspořádaného seznamu. Má časovou složitost O (n 2 )
- Seznam je rozdělen do dvou částí, seřazených a netříděných. Minimální hodnota je vybrána z netříděné sekce a umístěna do tříděné sekce.
- Tato věc se opakuje, dokud nebudou tříděny všechny položky.
- Implementace pseudokódu v Pythonu 3 zahrnuje použití dvou pro smyčky a příkazy if ke kontrole, zda je nutné vyměnit
- Časová složitost měří počet kroků potřebných k seřazení seznamu.
- Nejhorší časová složitost nastává, když je seznam sestupně. Má časovou složitost [Big-O] O (n 2 )
- Nejlepší časová složitost nastane, když je seznam již ve vzestupném pořadí. Má časovou složitost [Big-Omega] Ω (n 2 )
- Průměrná časová složitost nastane, když je seznam v náhodném pořadí. Má časovou složitost [Big-theta] ⊝ (n 2 )
- Seřazení výběru se nejlépe používá, pokud máte malý seznam položek k řazení, cena záměny hodnot nezáleží a kontrola všech hodnot je povinná.
- Třídění výběru nefunguje na velkých seznamech dobře
- Jiné třídicí algoritmy, například quicksort, mají ve srovnání s výběrem lepší výkon.