Řazení výběrem

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Ilustrace řazení výběrem na náhodné množině Animace řazení výběrem. Červeně je zvýrazněno aktuální minimum. Žlutě je označena srovnaná část seznamu. Modrá je aktuální položka Řazení výběrem je v informatice implementačně jednoduchý řadicí algoritmus s časovou složitostí . Pro svou jednoduchou implementaci a nízký overhead bývá často používán pro uspořádávání malých množství dat. Pro větší objem dat se používají algoritmy s nižší časovou složitostí jako řazení haldou nebo řazení slučováním.

Algoritmus je univerzální (pracuje na základě porovnávání dvojic prvků), pracuje lokálně (nevyžaduje pomocnou paměť), není stabilním (prvkům se stejným klíčem může změnit vzájemnou polohu) a nepatří mezi přirozené řadicí algoritmy (částečně seřazený seznam se bude zpracovávat stejně dlouho jako neseřazený).

Princip

Budeme uvažovat o vzestupném řazení. Seřazenou část budeme mít vlevo a vždy budeme hledat minimum z neseřazené části. +more Analogicky opačně se tento princip může aplikovat pro sestupné řazení.

# Rozdělíme si posloupnost na seřazenou a neseřazenou část # Najdeme prvek s nejmenší hodnotou v neseřazené části posloupnosti # Zaměníme ho s prvkem na první pozici neseřazené části # První prvek neseřazené části zahrneme do seřazené části a zároveň neseřazenou část zmenšíme o 1 prvek zleva # Zbytek posloupnosti se uspořádá opakováním kroků 2 až 5 pro zbylou neseřazenou část

Nestabilita řazení

Algoritmus není stabilním (může změnit pořadí u prvků se shodným klíčem).

Je to dáno tím, že se prohazují nesousední prvky. Například pokud uvážíme množinu M = \{3_1, 2, 3_2, 1\}, tak nám ji algoritmus seřadí jako M = \{1, 2, 3_2, 3_1\}. +more Zde je jasně vidět, že algoritmus prohodil prvky \{3_1\} a \{3_2\}, což stabilní algoritmus řazení neudělá.

Řazení výběrem je možno implementovat i stabilně, pokud se místo záměny prvků použije přesunutí nalezeného nejmenšího prvku na příslušné místo, k tomu je ovšem potřeba použití datové struktury s rychlým vkládáním a odstraňováním, například spojový seznam, jinak výrazně zhorší výkonnost algoritmu.

Implementace algoritmu

Příklad v jazyce C:

void selectionSort(int data[], int count) { int i, j, mi, tmp; for (i = 0; i

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top