快速冒泡排序

时间:2011-11-02 05:02:05

标签: python sorting

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

如何缩短此功能的时间,因为我想在更大的列表中使用它。

2 个答案:

答案 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