Python 这个冒泡排序逻辑正确吗

Python 这个冒泡排序逻辑正确吗,python,python-3.x,list,bubble-sort,Python,Python 3.x,List,Bubble Sort,我在youtube上看到了一些关于列表排序技术、气泡排序以及它们使用的代码的视频 list1 = [4, 8, 5, 3, 1] for i in range(len(list1)-1, 0, -1): for j in range(i): if list1[j] > list1[j+1]: t = list1[j] list1[j] = list1[j+1] list1[j+1] = t p

我在youtube上看到了一些关于列表排序技术、气泡排序以及它们使用的代码的视频

list1 = [4, 8, 5, 3, 1]

for i in range(len(list1)-1, 0, -1):
    for j in range(i):
        if list1[j] > list1[j+1]:
            t = list1[j]
            list1[j] = list1[j+1]
            list1[j+1] = t
print(list1)

在没有python的情况下,我自己选择不同的列表并对它们进行排序之后,我发现了一个模式,并对代码做了一些细微的安排,我得到了相同的输出

list1 = [4, 8, 5, 3, 1]

for i in range(1,len(list1)):
    for j in range(len(list1)-1):
        if list1[j] > list1[j+1]:
            t = list1[j]
            list1[j] = list1[j+1]
            list1[j+1] = t

print(list1)
但在这里,我只想知道逻辑是否相同,方法是否也是冒泡排序,因为将来当要求我进行冒泡排序时,我不想这样做,结果会感到尴尬:p


提前感谢:D

该算法是冒泡排序,但有不必要的比较。您可以对所有n个元素进行n次迭代排序。但是在第一次得到保证之后,最高值出现在最后一个位置,因此在下一步中,您只需要检查前n-1个元素,依此类推。在您的算法中,您只需继续到最后。这并不意味着这是错误的,但实际上并没有那么有效。但是,它不会改变O(n^2)的时间复杂度

编辑:
回答一些评论:是的,一般来说,为了提高效率,您不使用冒泡排序。但有一种情况,它的性能相当好(优化是在一次迭代没有更改时停止),这就是如果您有一个几乎排序的列表。

一个从右到左迭代,另一个从左到右迭代。它们都是泡沫型的,只是mirrored@MitchelPaulin从右到左和从左到右与升序或降序有关吗?不,这取决于您是否有
@mitchelbulin它们没有镜像。他们以完全相同的顺序执行完全相同的交换。@markransem这不是做实际工作的那个。这只是提供了一个限制或完成内部循环的次数。第二个版本允许进行优化(未显示),当您在没有交换的情况下通过时,您就完成了,并且可以提前退出。@MarkRansom您是指我的版本吗?@MarkRansom您是对的,但是你也可以在第一个版本中进行同样的优化。@CoolCloud Quicksort通常被认为是最快的,不是因为它有最好的big-O,而是因为常量因子较少——在最坏的情况下,它可能非常慢。Python本身使用Timsort。@CoolCloud O(n log(n))意味着算法只需要n log(n)个步骤(乘以极限中的常数,其中n是问题的大小。因此,例如,对于n=10000(包含10000项的列表),c n log(n)比c n^2小得多,即使对于相对较大的c也是如此。因此,该算法要快得多。