【发布时间】:2013-03-05 21:08:13
【问题描述】:
我在 python 中实现了插入排序,想知道如何确定算法的复杂性。这是实现插入排序的低效方式吗?对我来说,这似乎是最易读的算法。
import random as rand
source = [3,1,0,10,20,2,1]
target = []
while len(source)!=0:
if len(target) ==0:
target.append(source[0])
source.pop(0)
element = source.pop(0)
if(element <= target[0]):
target.reverse()
target.append(element)
target.reverse()
elif element > target[len(target)-1]:
target.append(element)
else:
for i in range(0,len(target)-1):
if element >= target[i] and element <= target[i+1]:
target.insert(i+1,element)
break
print target
【问题讨论】:
-
不是你的问题,但既然你提到了“可读性”:在 python 中,
while len(source)!=0相当于while source如果你知道source是一个列表或字符串等。还有,if len(target) == 0可以是if not target -
也推荐阅读PEP-8。例如,缩进 4 个空格。
-
你不妨看看
bisect模块 -
您只打算将
while循环中的第一个if语句调用一次。所以将它移出循环 - 将它放在循环之前。就像现在一样,给定一个元素列表,您的函数将尝试从中弹出一个元素 - 两次。
标签: python algorithm sorting insertion-sort