Cod sursa(job #2613857)

Utilizator ddeliaioanaaDumitrescu Delia Ioana ddeliaioanaa Data 10 mai 2020 19:18:06
Problema Statistici de ordine Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 0.89 kb
import random

f = open("/home/ddeliaioana/Documents/Python/Divide_et_Impera/sdo.in","r").read()
g = open("/home/ddeliaioana/Documents/Python/Divide_et_Impera/sdo.out","w")
f = f.splitlines()
aux = f[0].split(' ')
n = int(aux[0])
k = int(aux[1])
v = f[1].split(' ')
v = [int(x) for x in v]

def pivot_mediana(v):

    if len(v) <= 5:
        return sorted(v)[len(v)//2]

    liste = [ sorted(v[i:i+5]) for i in range(0,len(v),5)]
    mijloace = [ l[len(l)//2] for l in liste]

    return pivot_mediana(mijloace)

def quickselect(v, k, f_pivot ):
    pivot = f_pivot(v)

    L = [ x for x in v if x < pivot ]
    E = [ x for x in v if x == pivot]
    G = [ x for x in v if x > pivot]

    if k <= len(L):
        return quickselect(L, k, f_pivot)
    elif k <= len(L) + len(E) :
        return E[0]
    else:
        return quickselect(G, k - len(L) - len(E) ,f_pivot)

g.write(str(quickselect(v, k, pivot_mediana)))