【发布时间】:2013-04-19 07:02:02
【问题描述】:
我目前正在尝试在 python 中实现插入排序和选择排序。我的两个实现都有效。但是,当我对排序进行计时时,选择排序的执行速度始终比插入排序快 1.5 倍,尽管我的插入排序实现的比较次数大约是我的选择排序实现的一半。我似乎找不到原因。
def select_sort(data):
for i in range(len(data)):
minimum, index = None, i
for j in range(i, len(data)):
if minimum is None:
minimum = data[j]
if data[j] < minimum:
minimum = data[j]
index = j
data[i], data[index] = data[index], data[i]
return data
def insert_sort(data):
for i in range(1, len(data)):
for j in range(i, 0, -1):
if data[j] >= data[j - 1]:
break
data[j], data[j - 1] = data[j - 1], data[j]
return data
def time_sort(S):
elapsed = []
start = time()
insert_sort(copy(S))
elapsed.append(time() - start)
start = time()
select_sort(copy(S))
elapsed.append(time() - start)
return elapsed
【问题讨论】:
-
使用
xrange代替range会有所帮助,因为range会实例化一个新列表。您还可以将len(sort)存储在一个变量中,以减少函数调用。 -
是的,但我认为我的两种算法都使用 range 或多或少相同的次数。
-
您尝试排序的数据集可能会有所不同。您是否在多个数据集上尝试过此操作?
-
Nathan 可能为您指明了正确的方向。插入排序在部分有序数据上表现良好。
-
是的。我有一段代码生成 100 个介于 0 和 1 之间的随机数并对其执行 time_sort,然后对 1000 次不同试验的结果进行平均。不过我会尝试使用 xrange 看看我是否有运气。
标签: python sorting time-complexity