def bubble(lst):
swap = 'True'
counter = 0
n = len(lst)
m = len(lst)
while swap == 'True':
for j in range(n-1):
if lst[j] > lst[j+1]:
lst[j],lst[j+1] = lst[j+1],lst[j]
counter += 1
swap = 'True'
else:
swap = 'False'
n = n - 1
return counter
如何缩短此功能的时间,因为我想在更大的列表中使用它。
答案 0 :(得分:4)
更改算法。
使用MergeSort或QuickSort。
BubbleSort是O(n * n)。 它存在的唯一原因是向学生展示他们不应该如何排序数组:)
MergeSort是最坏的情况O(n log n)。
QuickSort是O(n * n)最坏的情况,平均情况为O(n log n),但是“低常量”,所以它通常比合并排序更快。
在网上搜索它们。
如果我没有错......(如果我愿意的话,不要愤怒我)......我想我明白你想做什么:
def bubble(lst):
n = len(lst)
while True
newn = 0
for i in range(1, n-1):
if lst[i-1] > lst[i]:
lst[i-1],lst[i] = lst[i],lst[i-1]
newn = i
counter += 1
if newn <= 0:
return counter
n = newn
然而,复杂性总是为O(n * n),因此您不会注意到任何重要的差异。
例如:
如果您的列表是2000个项目并且您使用冒泡排序,则O(2000 * 2000)= 4000000循环步骤。这是巨大的。
O(2000 * log2 2000)=大约21931个循环步骤,这是可以管理的。
答案 1 :(得分:-2)
def bubble(lol):
lol.sort()
return lol