《算法导论》第三版9.1-1
把n个元素分成一对对,每一对进行一次比较得出一个较小值,这是第一轮筛选,以此类推,一共进行
⌈
lg
n
具体实行起来,要构造一个二叉树,第一轮筛选作为底层结点,以此类推,那么根就是最小元素。构造完数之后,再沿着有最小元素的脉络,挑选第二小元素。
问题是,我在stack overflow上看到一段python代码,可以在 Θ(n) 内完成,代码如下:
def second_smallest(numbers):
m1, m2 = float('inf'), float('inf')
for x in numbers:
if x <= m1:
m1, m2 = x, m1
elif x < m2:
m2 = x
return m2
So,这是什么鬼?
代码链接http://stackoverflow.com/questions/26779618/python-find-second-smallest-number