45
Třídění a vyhledávání Searching and sorting Jan Kybic http://cmp.felk.cvut.cz/~kybic [email protected] 2016–2018 1 / 33

Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění a vyhledáváníSearching and sorting

Jan Kybic

http://cmp.felk.cvut.cz/[email protected]

2016–2018

1 / 33

Page 2: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Vyhledávání

Třídění

Třídící algoritmy

2 / 33

Page 3: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

VyhledáváníSearching

I Mějme posloupnost (pole) a0, . . . , aN−1

I Mějme hodnotu qI Úkol: zjistit, zda existuje ai = q

VariantyI Výstup: ano/ne nebo poziceI Hledání opakujeme mnohokrát pro stejné a

I předzpracování

I Posloupnost a je setříděná.I Stochastické hledání

3 / 33

Page 4: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

VyhledáváníSearching

I Mějme posloupnost (pole) a0, . . . , aN−1

I Mějme hodnotu qI Úkol: zjistit, zda existuje ai = q

VariantyI Výstup: ano/ne nebo poziceI Hledání opakujeme mnohokrát pro stejné a

I předzpracování

I Posloupnost a je setříděná.I Stochastické hledání

3 / 33

Page 5: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Vyhledávání v Pythonuoperátor in

Obsahuje pole daný prvek?

>>> a=[17,20,26,31,44,77,65,55,93]>>> 20 in aTrue>>> 30 in aFalse>>> 30 not in aTrue>>> 20 not in aFalse

4 / 33

Page 6: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Vyhledávání v Pythonu (2)

in / not in funguje i pro řetězce, n-tice a podobné typy(containers)

>>> "omo" in "Olomouc" # podřetězecTrue>>> "" in "Olomouc" # prázdný řetězecTrue>>> "olo" in "Olomouc" # rozlišuje velká/malá písmenaFalse>>> 4 in (3,4)True>>> 3. in (3,4) # na typu nezáležíTrue

5 / 33

Page 7: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Lineární vyhledávánílinear/sequential search

Procházíme postupně a než narazíme na q

def sequential_search(a,q):""" Returns ’True’ if ’a’ contains ’q’ """for x in a:

if x==q:return True

return False

Image from Miller & Ranum: Problem solving with algothms and data structures

6 / 33

Page 8: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Lineární vyhledávánílinear/sequential search

Procházíme postupně a než narazíme na q

def sequential_search(a,q):""" Returns ’True’ if ’a’ contains ’q’ """for x in a:

if x==q:return True

return False

Počet porovnání:

nejméně nejvíce průměrněq 6∈ a N N Nq ∈ a 1 N N/2

I Složitost O(N), kde N=len(a).I Rychleji to nejde, protože na každý prvek ai se musíme

podívat.6 / 33

Page 9: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Lineární vyhledávání — empirická složitost

0 500000 1000000 1500000 2000000 2500000 3000000n

0.00

0.05

0.10

0.15

0.20

0.25

0.30

time

[s]

seq inseq not inPython inPython not in

Soubor search_experiments.py

7 / 33

Page 10: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Binární vyhledáváníBinary search

Vyhledávání v setříděné posloupnosti

I Mějme posloupnost (pole) a1 ≤ a2 ≤ a3 ≤ · · · ≤ aN−1 ≤ aN

I Mějme hodnotu qI Úkol: zjistit, zda existuje ai = qI Je vyhledávání v setříděném poli rychlejší?

8 / 33

Page 11: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Binární vyhledáváníBinary search

Hlavní myšlenkyI Postupně zmenšujeme interval indexů, kde by mohlo ležet qI V každém kroku porovnáme q s prostředním prvkem intervalu

a podle toho zvolíme jeden z podintervalů.I Skončíme, pokud je prvek nalezen, nebo pokud je podinterval

prázdný.

Image from Miller & Ranum: Problem solving with algothms and data structures

8 / 33

Page 12: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Binární vyhledávání — implementace

def binary_search(a,q):l=0 # first index of the subintervalh=len(a)-1 # last index of the subintervalwhile l<=h:

m=(l+h)//2 # middle pointif a[m]==q:

return Trueif a[m]>q:

h=m-1else:

l=m+1return False

9 / 33

Page 13: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Binární vyhledávání — časová složitost

Počet porovnáníI Počet prvků v intervalu je d = h− l + 1 a v první iteraci d = NI V každé iteraci se interval d zmenší nejméně na polovinuI Po t iteracích je d ≤ N2−t

I Dokud algoritmus běží, musí platit d ≥ 1,

1 ≤ d ≤ N2−t

2t ≤ N ⇒ t ≤ log2 N

I Počet porovnání t ∼ log2 NI Složitost O(log n)I Strategie rozděl a panuj (Divide and conquer)

10 / 33

Page 14: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Binární vyhledávání — empirická složitost

0 500000 1000000 1500000 2000000 2500000 3000000n

0.000006

0.000008

0.000010

0.000012

0.000014

0.000016

0.000018tim

e [s

]binary inbinary not in

Soubor search_experiments.py

11 / 33

Page 15: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Binární vs. sekvenční vyhledávání

103 104 105 106 107

n

10-6

10-5

10-4

10-3

10-2

10-1

100

time

[s]

seq inseq not inbinary inbinary not in

Vyplatí se, pokud mnohokrát vyhledáváme nad stejným a.12 / 33

Page 16: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Vyhledávání

Třídění

Třídící algoritmy

13 / 33

Page 17: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

TříděníSorting

I Mějme posloupnost (pole) A =[a0, . . . , aN−1

]a relaci ‘≤’

I Najděte takovou permutaci B =[b0, . . . , bN−1

]pole A, aby

b0 ≤ b1 ≤ · · · ≤ bN−1.

Poznámky:I Formy výstupu:

I Třídění na místě (in place)I Vytvoření nového pole B, pole A zůstává nezměněno.I Najdeme indexy j1, j2, . . . , jN , tak aby bi = aji (a[j[i]])

I Stabilní třídění — zachovává pořadí ekvivalentních prvků.

14 / 33

Page 18: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění v Pythonu

Funkce sorted vrací nové setříděné pole>>> a=[80,43,20,15,90,67,51]>>> sorted(a)[15, 20, 43, 51, 67, 80, 90]

Metoda sort setřídí pole na místě (úspornější)>>> a.sort()>>> a[15, 20, 43, 51, 67, 80, 90]

Třídění sestupně>>> sorted(a,reverse=True)[90, 80, 67, 51, 43, 20, 15]

15 / 33

Page 19: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění v Pythonu

Funkce sorted vrací nové setříděné pole>>> a=[80,43,20,15,90,67,51]>>> sorted(a)[15, 20, 43, 51, 67, 80, 90]

Metoda sort setřídí pole na místě (úspornější)>>> a.sort()>>> a[15, 20, 43, 51, 67, 80, 90]

Třídění sestupně>>> sorted(a,reverse=True)[90, 80, 67, 51, 43, 20, 15]

15 / 33

Page 20: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění řetězců

Lze třídit veškeré porovnatelné typy, například řetězce>>> names=["Barbora","Adam","David","Cyril"]>>> sorted(names)[’Adam’, ’Barbora’, ’Cyril’, ’David’]

Třídění není podle českých pravidel

print(sorted(["pan","paze"]))

['pan', 'paze']

print(sorted(["pán","paže"]))

['paže', 'pán']

16 / 33

Page 21: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění řetězců

Lze třídit veškeré porovnatelné typy, například řetězce>>> names=["Barbora","Adam","David","Cyril"]>>> sorted(names)[’Adam’, ’Barbora’, ’Cyril’, ’David’]

Třídění není podle českých pravidel

print(sorted(["pan","paze"]))

['pan', 'paze']

print(sorted(["pán","paže"]))

['paže', 'pán']

16 / 33

Page 22: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění n-tic

n-tice jsou tříděny postupně podle složek>>> a=[(50,2),(50,1),(40,100),(40,20)]>>> sorted(a)[(40, 20), (40, 100), (50, 1), (50, 2)]

>>> studenti=[("Bara",18),("Adam",20),... ("David",15),("Cyril",25)]>>> sorted(studenti)[(’Adam’, 20), (’Bara’, 18), (’Cyril’, 25), (’David’, 15)]

17 / 33

Page 23: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění n-tic

n-tice jsou tříděny postupně podle složek>>> a=[(50,2),(50,1),(40,100),(40,20)]>>> sorted(a)[(40, 20), (40, 100), (50, 1), (50, 2)]

>>> studenti=[("Bara",18),("Adam",20),... ("David",15),("Cyril",25)]>>> sorted(studenti)[(’Adam’, 20), (’Bara’, 18), (’Cyril’, 25), (’David’, 15)]

17 / 33

Page 24: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Uživatelská třídící funkce

Funkce v parametru key transformuje prvky pro třídění.

Třídení podle druhé složky dvojice>>> a=[(50,2),(50,1),(40,100),(40,20)]>>> sorted(a,key=lambda x: x[1])[(50, 1), (50, 2), (40, 20), (40, 100)]

>>> studenti=[("Bara",18),("Adam",20),... ("David",15),("Cyril",25)]>>> sorted(studenti,key=lambda x: x[1])[(’David’, 15), (’Bara’, 18), (’Adam’, 20), (’Cyril’, 25)]

18 / 33

Page 25: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Uživatelská třídící funkce (2)

Třídění bez ohledu na velikost písmen>>> s=["Python","Quido","abeceda","zahrada"]>>> sorted(s)[’Python’, ’Quido’, ’abeceda’, ’zahrada’]>>> sorted(s,key=lambda x: x.lower())[’abeceda’, ’Python’, ’Quido’, ’zahrada’]

19 / 33

Page 26: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Vyhledávání

Třídění

Třídící algoritmy

20 / 33

Page 27: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídící algoritmy

I Třídění probubláváním (bubble sort)I Třídění zatřiďováním (insertion sort)I Třídění výběrem (selection sort)I Shell sortI Třídění spojováním (merge sort)I Quick sortI sort, sorted

21 / 33

Page 28: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Řazení probublávánímBubble sort

Vyměňuje sousední prvky ve špatném pořadí. Jeden průchod:

Image from Miller & Ranum: Problem solving with algothms and data structures

22 / 33

Page 29: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Řazení probubláváním — implementaceBubble sort

def bubble_sort(a):""" sorts array a in-place in ascending order"""for i in range(len(a)-1,0,-1):

# i=n-1..1. a[i+1:] is already sortedfor j in range(i):

if a[j]>a[j+1]:a[j],a[j+1]=a[j+1],a[j] # exchange

SložitostI Vnější smyčka proběhne N − 1 ∼ N-krátI Vnitřní smyčka proběhne vždy i-krát, kde i < N, tedy max.

N-krátI Počet porovnání je tedy max. N2 → složitost O(N2)

I Počet výměn je velký, element musí ‘probublat’ nakonec

23 / 33

Page 30: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Řazení probubláváním — implementaceBubble sort

def bubble_sort(a):""" sorts array a in-place in ascending order"""for i in range(len(a)-1,0,-1):

# i=n-1..1. a[i+1:] is already sortedfor j in range(i):

if a[j]>a[j+1]:a[j],a[j+1]=a[j+1],a[j] # exchange

SložitostI Vnější smyčka proběhne N − 1 ∼ N-krátI Vnitřní smyčka proběhne vždy i-krát, kde i < N, tedy max.

N-krátI Počet porovnání je tedy max. N2 → složitost O(N2)

I Počet výměn je velký, element musí ‘probublat’ nakonec

23 / 33

Page 31: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Řazení probubláváním — vylepšení

Pokud neproběhla žádná výměna, je pole setříděné.

def bubble_sort(a):""" sorts array a in-place in ascending order"""for i in range(len(a)-1,0,-1):

# i=n-1..1. a[i+1:] is already sortedexchanged=False # exchanges in this iteration?for j in range(i):

if a[j]>a[j+1]:a[j],a[j+1]=a[j+1],a[j] # exchangeexchanged=True

if not exchanged: break

24 / 33

Page 32: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění probubláváním — kontrola

>>> a=[31, 60, 23, 91, 62, 65, 59, 92, 42, 74]>>> bubble_sort(a)>>> a[23, 31, 42, 59, 60, 62, 65, 74, 91, 92]

Správný test je důkladnější:

def test_sort(f=bubble_sort):for j in range(100):

n=100a=[random.randrange(100000) for i in range(n)]f(a)for i in range(n-1):

assert(a[i]<=a[i+1])print(f.__name__," sort test passed")

25 / 33

Page 33: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění probubláváním — kontrola

>>> a=[31, 60, 23, 91, 62, 65, 59, 92, 42, 74]>>> bubble_sort(a)>>> a[23, 31, 42, 59, 60, 62, 65, 74, 91, 92]

Správný test je důkladnější:

def test_sort(f=bubble_sort):for j in range(100):

n=100a=[random.randrange(100000) for i in range(n)]f(a)for i in range(n-1):

assert(a[i]<=a[i+1])print(f.__name__," sort test passed")

25 / 33

Page 34: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění zatřiďovánímInsertion sort

Prvek ai zatřídíme do již setříděných a0, . . . , ai−1

26 / 33

Page 35: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění zatřiďováním — implementaceInsertion sort

def insertion_sort(a):""" sorts array a in-place in ascending order"""for i in range(1,len(a)): # a[0:i] is sorted

val=a[i]j=iwhile j>0 and a[j-1]>val:

a[j]=a[j-1]j-=1

a[j]=val

SložitostI Vnější smyčka proběhne N − 1 ∼ N-krát.I Vnitřní smyčka proběhne max. i < N krát.I Počet porovnání je tedy max. N2 → složitost O(N2).I Nepoužívá výměny, ale posun (rychlejší).I Přirozeně detekuje setříděné pole.

27 / 33

Page 36: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění zatřiďováním — implementaceInsertion sort

def insertion_sort(a):""" sorts array a in-place in ascending order"""for i in range(1,len(a)): # a[0:i] is sorted

val=a[i]j=iwhile j>0 and a[j-1]>val:

a[j]=a[j-1]j-=1

a[j]=val

SložitostI Vnější smyčka proběhne N − 1 ∼ N-krát.I Vnitřní smyčka proběhne max. i < N krát.I Počet porovnání je tedy max. N2 → složitost O(N2).I Nepoužívá výměny, ale posun (rychlejší).I Přirozeně detekuje setříděné pole.

27 / 33

Page 37: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění zatřiďováním — kontrola

>>> a=[43, 22, 42, 7, 58, 85, 48, 82, 80, 1]>>> insertion_sort(a)>>> a[1, 7, 22, 42, 43, 48, 58, 80, 82, 85]

28 / 33

Page 38: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění výběremSelection sort

I Vybere maximum mezi a0, . . . , aN−1, to umístí do aN−1.I Vybere maximum mezi a0, . . . , aN−2, to umístí do aN−2. . .

29 / 33

Page 39: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění výběrem — implementaceSelection sort

def selection_sort(a):""" sorts array a in-place in ascending order"""for i in range(len(a)-1,0,-1):

# find out what should go to a[i]max_pos=0 # index of the maximumfor j in range(1,i+1):

if a[j]>a[max_pos]:max_pos=j

a[i],a[max_pos]=a[max_pos],a[i]

SložitostI Vnější smyčka proběhne N − 1 ∼ N-krátI Vnitřní smyčka proběhne vždy i-krát, kde i < N, tedy max.

N-krátI Počet porovnání je tedy max. N → složitost O(N2)

I Pouze jedna výměna v každé vnější smyčce

30 / 33

Page 40: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění výběrem — implementaceSelection sort

def selection_sort(a):""" sorts array a in-place in ascending order"""for i in range(len(a)-1,0,-1):

# find out what should go to a[i]max_pos=0 # index of the maximumfor j in range(1,i+1):

if a[j]>a[max_pos]:max_pos=j

a[i],a[max_pos]=a[max_pos],a[i]

SložitostI Vnější smyčka proběhne N − 1 ∼ N-krátI Vnitřní smyčka proběhne vždy i-krát, kde i < N, tedy max.

N-krátI Počet porovnání je tedy max. N → složitost O(N2)

I Pouze jedna výměna v každé vnější smyčce30 / 33

Page 41: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Třídění výběrem — kontrola

>>> a=[60, 46, 31, 69, 45, 11, 43, 14, 61, 36]>>> selection_sort(a)>>> a[11, 14, 31, 36, 43, 45, 46, 60, 61, 69]

31 / 33

Page 42: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Porovnání rychlostiNáhodná pole

0 2000 4000 6000 8000 10000N

0

5

10

15

20

25

30tim

e [s

]bubble_sortselection_sortinsertion_sortpython_sort

32 / 33

Page 43: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Porovnání rychlostiNáhodná pole

102 103 104

N

10-4

10-3

10-2

10-1

100

101

102tim

e [s

]

bubble_sortselection_sortinsertion_sortpython_sort

32 / 33

Page 44: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Porovnání rychlostiSetříděné pole

0 2000 4000 6000 8000 10000N

0

2

4

6

8

10

12

14

16tim

e [s

]bubble_sortselection_sortinsertion_sortpython_sort

33 / 33

Page 45: Trídení a vyhledávání Searching and sorting · I Strategierozděl a panuj (Divide and conquer) 10/33. Binárnívyhledávání—empirickásložitost ... 22/33. Řazeníprobubláváním—implementace

Porovnání rychlostiSetříděné pole

102 103 104

N

10-5

10-4

10-3

10-2

10-1

100

101

102tim

e [s

]

bubble_sortselection_sortinsertion_sortpython_sort

33 / 33