【发布时间】:2018-03-28 22:04:36
【问题描述】:
我尝试使用两种排序算法对列表进行排序:冒泡算法和快速算法。
为此,我分别使用 algorithms 模块和 bubble_sort , quick_sort 。据我所知,第一个算法的复杂度是n^2,第二个是n*log(n)。但是我从这段代码中得到了意想不到的输出:
from algorithms.sorting import bubble_sort, quick_sort
import time
my_list = [1, 12, 33, 14, 52, 16, 71, 18, 94]
start1 = time.time()
for i in range(1000000):
bubble_sort.sort(my_list)
end1 = time.time()
start2 = time.time()
for i in range(1000000):
quick_sort.sort(my_list)
end2 = time.time()
print('Bubble sort:', end1 - start1)
print('Quick sort:',end2 - start2)
输出:
>>> Bubble sort: 7.04760217666626
>>> Quick sort: 8.181402921676636
为什么在这种情况下冒泡排序比快速排序快?
【问题讨论】:
-
您的测试数据太小,
n^2没有意义 -
并从尚未排序的列表开始。
-
因为列表已经排序。根据选择枢轴元素的方式,快速排序在这种情况下可能会表现不佳。
-
另外,您的数据已经排序。我不知道
algorithms模块(而且你没有说它来自哪里),但它看起来足够聪明,可以在内部循环没有执行任何交换时终止。所以在这种情况下,它对列表进行了一次传递,即 O(n)。
标签: python algorithm python-3.x