Python:如何使我的气泡排序实施更省时?
作者:互联网
这是我的代码-一种气泡排序算法,用于按升序对列表元素进行排序:
foo = [7, 0, 3, 4, -1]
cnt = 0
for i in foo:
for i in range(len(foo)-1):
if foo[cnt] > foo[cnt + 1]:
temp = foo[cnt]
c[cnt] = c[cnt + 1]
c[cnt + 1] = temp
cnt = cnt + 1
cnt = 0
我一直在修改我的代码,但是对于在线法官而言,它仍然效率太低.一些帮助将不胜感激!
解决方法:
Early Exit BubbleSort
>第一个循环与内部发生的事情无关
>第二个循环完成所有繁重的工作.您可以使用枚举来摆脱计数
>要交换元素,请使用pythonic交换-a,b = b,a.
>根据this comment,请使用早期退出.如果在内循环中的任何一点都没有交换,则意味着该列表已排序,并且不需要进一步的迭代.这就是改变的直觉.
>根据定义,在外循环的第i次迭代之后,将对最后的i个元素进行排序,因此您可以进一步减少与该算法相关的常数因子.
foo = [7, 0, 3, 4, -1]
for i in range(len(foo)):
changed = False
for j, x in enumerate(foo[:-i-1]):
if x > foo[j + 1]:
foo[j], foo[j + 1] = foo[j + 1], foo[j]
changed = True
if not changed:
break
print(foo)
[-1, 0, 3, 4, 7]
请注意,这些优化都不能改变BubbleSort的渐近(Big-O)复杂度(仍为O(N ** 2)),而只会减少相关的常数.
标签:bubble-sort,python,performance,sorting 来源: https://codeday.me/bug/20191011/1895989.html