## Cvičení 8:
## Řadicí algoritmy a opakování binárního vyhledávání.


## Nová látka:

# Pokud chceme v průběhu programu znát nějaký vstup od uživatele,
# zeptáme se ho pomocí funkce input("Otazka na uzivatele: ")
cislo = input("Zadej nejake cislo: ")
jmeno = input("Napis svoje jmeno: ")
print(cislo, jmeno, sep="\t", end="\n\n")

# Pokud uživatel zadá vstup z klávesnice,
# je tento vstup reprezentován jako řetězec.
text = input("Zadej 123: ")
if text == "123":
    print("I kdyz uzivatel zadal cislo, je reprezentovane jako text.")
elif text == 123:
    print("I kdyz uzivatel zadal cislo, tak porovnani s jinym cislem neprobehne spravne.")

if int(text) == 123:
    print("Toto uz bude fungovat, protoze funkci int() jsme zadany text prevedli na cislo.")
print()

# Další podobné funkce pro převod mezi textem a čísly:
cele_cislo = int(text)
desetinne_cislo = float(text)
text = str(desetinne_cislo)


## Příklad:
# Chceme po uživateli, aby zadával čísla, dokud nenapíše nulu
cislo = input("Zadej cislo: ")
while float(cislo) != 0:
    print("Zadane cislo neni nula, zadal jsi ", cislo, ".", sep="")
    cislo = input("Zadej cislo: ")
print("Zadal jsi nulu, hra konci, dekuji.", end="\n\n")

## Úkol (opakování z minulého cvičení):
# Uživatel si myslí číslo od 0 do 'maximum' a váš program toto číslo hádá.
# Váš program se může ptát: "Je tvoje číslo menší/větší než XXX?"
# Podle odpovědí od uřivatele najděte pomocí binárního vyhledávání číslo, které si uživatel myslí.
def hadam_cislo(maximum):
    minimum = 0
    result = '?'
    center = maximum//2
    while result != '=':
        center = (maximum-minimum)//2+minimum
        result = input("Je cislo mensi (<), rovno (=) nebo vetsi (>) nez " + str(center) + "? ")
        if result == '<':
            maximum = center
        if result == '>':
            minimum = center
    print("Uhodl jsem, hledane cislo je " + str(center) + ".")

hadam_cislo(1024)

## Nová látka:
# Podívejte se, jak fungují řadicí algoritmy:
# http://www.sorting-algorithms.com/

## Úkol:
# Vyberte si jeden nebo dva řadicí algoritmy a implementujte je.
def my_sort(seznam):
    seznam.sort()
    return seznam # toto funguje, ale jako reseni to v teto uloze neuznam, jinak klidne pouzivejte

def bubble_sort(seznam):
    for a in range(len(seznam)-1):
        for b in range(len(seznam)-1, a, -1):
            if(seznam[a] > seznam[b]):
                temp = seznam[a]
                seznam[a] = seznam[b]
                seznam[b] = temp
    return seznam

unsorted_list = [5,2,1,4,7,8,9,6,3,0]
print(bubble_sort(unsorted_list))

def selection_sort(seznam):
    for a in range(len(seznam)):
        indexWithMinNum = a
        for b in range(a, len(seznam)):
            if seznam[indexWithMinNum] > seznam[b]:
                temp = seznam[a]
                seznam[a] = seznam[b]
                seznam[b] = temp
    return seznam

print(selection_sort(unsorted_list))
