Stewdent.eu
▾

Bublinkové triedenie

Bublinkové triedenie (bubble sort) je jednoduchý triediaci algoritmus, ktorý opakovane prechádza zoznamom a zamieňa susedné prvky, ak sú v nesprávnom poradí.

Posledná aktualizácia: 2. januára 2026

★★☆☆☆ Stupeň 2computingalgoritmytriedeniebubble-sort3 min čítania

Nahlásiť chybu

Triediace algoritmy usporiadajú prvky zoznamu do určitého poradia — napríklad od najmenšieho po najväčšie. Bublinkové triedenie je jedno z najjednoduchších — ideálne na pochopenie základného princípu triedenia.

Ako funguje?

Algoritmus opakovane prechádza zoznamom a porovnáva každý pár susedných prvkov. Ak je ľavý prvok väčší ako pravý, vymení ich. Väčšie prvky tak "bublajú" na koniec zoznamu — odtiaľ názov bublinkové.

Vizualizácia pre zoznam [5, 3, 8, 1]:

1. priechod:

  • Porovnaj 5 a 3 → vymeň → [3, 5, 8, 1]
  • Porovnaj 5 a 8 → nechaj → [3, 5, 8, 1]
  • Porovnaj 8 a 1 → vymeň → [3, 5, 1, 8]

2. priechod:

  • Porovnaj 3 a 5 → nechaj → [3, 5, 1, 8]
  • Porovnaj 5 a 1 → vymeň → [3, 1, 5, 8]
  • Porovnaj 5 a 8 → nechaj → [3, 1, 5, 8]

3. priechod:

  • Porovnaj 3 a 1 → vymeň → [1, 3, 5, 8]
  • Ostatné sú správne → hotovo!
Poznámka

Po každom priechode je na konci zoznamu aspoň jeden ďalší prvok správne umiestnený. Po N-1 priechodoch je celý zoznam zoradený.

Implementácia v Pythone

def bublinkove_triedenie(zoznam):
    n = len(zoznam)
    
    for i in range(n):
        # Každý priechod posuňuje ďalší najväčší prvok na miesto
        for j in range(0, n - i - 1):
            if zoznam[j] > zoznam[j + 1]:
                # Výmena susedných prvkov
                zoznam[j], zoznam[j + 1] = zoznam[j + 1], zoznam[j]
    
    return zoznam

cisla = [64, 34, 25, 12, 22, 11, 90]
print(bublinkove_triedenie(cisla))
# [11, 12, 22, 25, 34, 64, 90]

Optimalizácia — skoré ukončenie

Ak pri jednom priechode nedošlo k žiadnej výmene, zoznam je už zoradený a môžeme skončiť:

def bublinkove_triedenie_optimum(zoznam):
    n = len(zoznam)
    
    for i in range(n):
        vymena = False
        for j in range(0, n - i - 1):
            if zoznam[j] > zoznam[j + 1]:
                zoznam[j], zoznam[j + 1] = zoznam[j + 1], zoznam[j]
                vymena = True
        
        if not vymena:
            break   # žiadna výmena = zoznam je zoradený
    
    return zoznam

Výkon bublinkového triedenia

PrípadPočet porovnaní
Najhorší (obrátene zoradený)N² / 2
PriemernýN² / 4
Najlepší (už zoradený)N (s optimalizáciou)
Upozornenie

Bublinkové triedenie je veľmi pomalé pre veľké zoznamy. Pre 1 000 prvkov potrebuje až 500 000 porovnaní. V praxi sa používajú efektívnejšie algoritmy ako quicksort alebo mergesort.

Kedy použiť bublinkové triedenie?

  • Len na vzdelávacie účely — je ľahko pochopiteľné.
  • Pre malé zoznamy (do ~20 prvkov) kde výkon nie je dôležitý.
  • V produkcii ho nahraďte vstavanou funkciou sorted() alebo .sort().

Cvičné príklady

Koľko výmen (swap) je potrebných pri jednom priechode bublinkového triedenia pre zoznam [3, 1, 2]?

Zobraziť odpoveď
2 výmeny. Prvý priechod: porovnaj 3 a 1 → vymeň → [1, 3, 2]; potom porovnaj 3 a 2 → vymeň → [1, 2, 3]. Celkovo 2 výmeny.

Prečo sa vnútorný cyklus v bublinkovanom triedení používa range(0, n - i - 1) a nie range(0, n - 1)?

Zobraziť odpoveď
Po každom i-tom priechode je posledných i prvkov správne umiestnených (najväčšie prvky 'vybublali' na koniec). Preto ich netreba znova porovnávať — čím sa algoritmus mierne zrýchli.