def urejanje_z_izbiranjem(a):
    """Tabelo a uredi na mestu."""
    for i in range(0, len(a)-1):
        # j naj bo indeks najmanjsega elementa med a[i], a[i+1], ..., a[len(a)-1]
        j = i # kandidat za indeks najmanjsega
        for k in range(i+1, len(a)):
            if a[k] < a[j]:
                j = k # nasli smo boljsega kandidata
        # zamenjaj a[i] in a[j]
        (a[i], a[j]) = (a[j], a[i])
        # Tudi takole bi lahko zamenjali:
        # x = a[i]
        # a[i] = a[j]
        # a[j] = x

def hitro_urejanje(a):
    """Tabelo a uredi na mestu."""
    
    def uredi_podtabelo(i,j):
        """Uredi podtabelo a[i:j]."""
        if j - i > 1:
            k = premeci_podtabelo(i,j)
            uredi_podtabelo(i,k)
            uredi_podtabelo(k+1,j)

    def premeci_podtabelo(i,j):
        """Premeci elemente podtabele a[i:j], za pivot uporabi a[i].
           Vrni indeks, na katerem je na koncu pristal pivot.
        """
        p = a[i]
        k = i + 1
        m = j - 1
        while k < m:
            # z k-jem poiscemo vecjega od p
            while a[k] <= p and k < m: k = k + 1
            # z m-jem poiscemo manjsega od p
            while a[m] >= p and k < m: m = m - 1
            # zamenjamo a[k] in a[m]
            (a[k], a[m]) = (a[m], a[k])
        # Damo pivot na pravo mesto
        if a[k] <= p:
            (a[i], a[k]) = (a[k], a[i])
            return k
        else:
            (a[i], a[k-1]) = (a[k-1], a[i])
            return (k-1)

    # Telo funkcije hitro_urejanje:
    uredi_podtabelo(0, len(a))
    
