Cod sursa(job #2536361)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 1 februarie 2020 20:46:40
Problema Sortare prin comparare Scor 40
Compilator py Status done
Runda Arhiva educationala Marime 0.87 kb
import random
def read_gen(fname):
    with open(fname, 'rt') as fin:
        for line in fin:
            for val in line.split():
                yield int(val)

def qsort(v, left, right):

    if right - left < 1:
        return 

    piv = random.randint(left, right)
    v[piv], v[right] = v[right], v[piv]
    val = v[right]
    sep = left
    
    for i in range(left, right):
        if v[i] < val:
            v[i], v[sep] = v[sep], v[i]
            sep += 1

    v[sep], v[right] = v[right], v[sep]
    qsort(v, left, sep - 1)
    qsort(v, sep + 1, right)
    return v

if __name__ == "__main__":
    it = read_gen('algsort.in')
    n = next(it)
    v = []
    for _ in range(n):
        x = next(it)
        v.append(x)
    
    v = qsort(v, 0, n - 1)

    with open('algsort.out', 'wt') as fout:
        for x in v:
            fout.write('{} '.format(x))
        fout.write('\n')