Cod sursa(job #2871263)

Utilizator iulia.talpalariuIulia-Georgiana Talpalariu iulia.talpalariu Data 14 martie 2022 08:22:02
Problema Sortare prin comparare Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.18 kb

def reheap(vector, l, rdx):

    maxim_desc = rdx
    st = (rdx << 1) + 1
    dr = (rdx << 1) + 2
    # sa vad daca exista desc imediati si daca e vreunul mai mare decat rdx actual
    if dr < l:
        if vector[dr] > vector[maxim_desc]:
            maxim_desc = dr
    if st < l:
        if vector[st] > vector[maxim_desc]:
            maxim_desc = st

    if vector[rdx] < vector[maxim_desc]:
        vector[rdx] = vector[rdx] ^ vector[maxim_desc]
        vector[maxim_desc] = vector[rdx] ^ vector[maxim_desc]
        vector[rdx] = vector[rdx] ^ vector[maxim_desc]
        reheap(vector, l, maxim_desc)

def heap_sort(vector):
    lungime = len(vector)

    for i in range((lungime >> 1)-1, -1, -1):
        reheap(vector, lungime, i)

    for i in range(lungime-1, 0, -1): #extrag de n-1 ori maximul din max heap
        vector[i] = vector[i] ^ vector[0]
        vector[0] = vector[i] ^ vector[0]
        vector[i] = vector[i] ^ vector[0]
        reheap(vector, i, 0)

with open("algsort.in","r") as f:
    n=int(f.readline())
    A=[int(x) for x in f.readline().split()]

heap_sort(A)

# A= [ 456, 90, 56, 345, 9, 0 , 1, 4, 590,37,800]
# heap_sort(A)
# print(A)