python实现找到第i小的元素

来源:互联网 发布:姓名贴软件 编辑:程序博客网 时间:2024/06/06 15:47

代码如下:

# -*- coding:utf-8 -*-# python实现找到第i小的元素import randomdef RandomizedSelect(li, p, r, i):    '''li为所要操作的列表       p为起始位置       r为结束位置       i表示第i小元素'''    if p == r:        return li[p]    q = RandomizedPartition(li, p, r)    k = q - p + 1    if i == k:        return li[q]    elif i < k:        return RandomizedSelect(li, p, q-1,i)    else:        return RandomizedSelect(li, q+1, r, i-k)def RandomizedPartition(li, p, r):'''此函数的功能是先随机出主元,然后一一和主元比较,并相应的交换位置   最后得到,在主元的左边全部小于它,主元的右边全部大于它。'''    e = random.randint(p,r)    li[e],li[r]=li[r],li[e]    x = li[r]    i = p - 1    for j in range(p, r):        if li[j] < x:            i += 1            li[i],li[j] = li[j],li[i]    li[i+1],li[r] = li[r],li[i+1]    return i+1if __name__ == '__main__':    li = [1,4,6,3,7,9,12,89,34,76,34,87,990]    print RandomizedSelect(li, 0, len(li)-1, 12)
0 0
原创粉丝点击