最坏情况下,找到n个元素中第二小的元素需要(n-1)+(lgn向上取整+1)

来源:互联网 发布:java爬虫代码视频教程 编辑:程序博客网 时间:2024/06/02 07:10

在最坏情况下,找到n个元素中第二小的元素需要n+向上取整lgn-2次比较。

class Num(object):    def __init__(self, num):        self.num=num        self.compared=list()    def __repr__(self):        return "{0},{1}".format(self.num, self.compared)    def __cmp__(self, obj):        self.compared.append(obj.num)        obj.compared.append(self.num)        res = cmp(self.num, obj.num)        if res==0:            self.compared.extend(obj.compared)            obj.compared.extend(self.compared)        return resdef get_the_last_but_one(L):    assert len(L) >= 2    length = len(L)    L = [Num(ele) for ele in L]    for i in xrange(length-1):        ele1, ele2 = L[0], L[1]        del L[0], L[0]        if ele1<=ele2:            L.append(ele1)        else:            L.append(ele2)    assert len(L) == 1    compared = L[0].compared    the_last_but_one = min(L[0].compared)    return the_last_but_one if __name__ == "__main__":    import sys    L = sys.argv[1:]    if not L:        import random        L = [random.randint(1, 10) for i in xrange(10)]    print L    print get_the_last_but_one(L)
1 0
原创粉丝点击