编程语言
首页 > 编程语言> > Python:如何使我的气泡排序实施更省时?

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