为什么这是一个糟糕的冒泡排序算法?

时间:2017-09-02 19:19:19

标签: python algorithm python-3.x sorting

我开始研究数据结构和算法,并尝试实现冒泡排序:

def BubbleSort(list):
    for a in range(len(list)): 
      for b in range(len(list)):# I could start this loop from 1
        if list[a]< list[b]:   # to avoid comparing the first element twice
          temp=list[a]
          list[a]=list[b]
          list[b]=temp
    return list

我浏览了网络和书籍 - 但没有找到泡泡排序的Python实现。 上面有什么问题?

2 个答案:

答案 0 :(得分:3)

有几件事:

  1. algorihm不会总是正确排序;
  2. 从语法上来说,它似乎正好相反;
  3. 执行冒泡排序需要两倍的时间;
  4. bubblesort;和
  5. 你最好永远不要在名为listdict等的Python中使用变量
  6. BubbeSort 通过比较两个相邻的元素进行排序:所谓的&#34; bubble&#34;。如果检查左项是否确实小于正确项。如果不是这种情况,它会交换元素。该算法在列表上迭代最大 n 次,之后保证对其进行排序。

    所以一个非常基本的实现是:

    def BubbleSort(data):
        for _ in range(len(data)):  # iterate n times
            for i in range(len(data)-1):  # i is the left index of the bubble
                if data[i+1] > data[i]:  # if the left item is greater
                    # perform a swap
                    temp = data[i]
                    data[i] = data[i+1]
                    data[i+1] = temp
        return data

    现在我们可以通过停留在len(data)-1-j来改进算法(大约让算法在一半的时间内工作),因为在每次迭代之后,气泡移动的最右边的元素保证是最大的:

    def BubbleSort(data):
        for j in range(len(data)):  # iterate n times
            for i in range(len(data)-1-j):  # i is the left index of the bubble
                if data[i+1] > data[i]:  # if the left item is greater
                    # perform a swap
                    temp = data[i]
                    data[i] = data[i+1]
                    data[i+1] = temp
        return data

    但是使用bubblesort是 - 除了一些非常罕见的情况 - 效率低下。最好使用更快的算法,如 QuickSort MergeSort TimSort (Python的内置排序算法)。

答案 1 :(得分:0)