UNB/ CS/ David Bremner/ teaching/ cs3383/ files/ a03-demos/ select2.py
from partition import partition
from random import randrange

def select2(A, p, q, i):
    n = q - p + 1
    if n==1: return A[p]
    loc = randrange(p,q) # choose random integer in [p,q)
    r = partition(A,p,q,loc) # See quicksort slides
    k = r - p 
    if (k == i): return A[r]
    if (i < k):
        return select2(A,p,r-1,i)
    else:
        return select2(A,r+1,q,i-k-1)

if __name__ == "__main__":
    from random import choices

    n=11

    A = choices(range(0,100),k=n)
    print("A=",A);

    median = select2(A,0,n-1,n//2)
    print("median=",median)

    B=sorted(A)
    print("median via sorting = ",B[n//2])