【问题标题】:A bubble sort in Python,use to processing listPython中的冒泡排序,用于处理列表
【发布时间】:2012-05-09 09:30:40
【问题描述】:

代码很简单

def bubble_sort(l):
    for i in xrange(0, len(l)-1) :
        for n in xrange(0, len(l)) :
            if l[i] > l[i+1] :
                l[i], l[i+1] = l[i+1], l[i]

lst = [[1, 8, 2], [3, 2, 5], [2, 13, 3], [2, 5, 5], [2, 5, 6], [5, 11, 6], [5, 5, 6]]
print(lst)
bubble_sort(lst)
print(lst)

结果:

[[1, 8, 2], [3, 2, 5], [2, 13, 3], [2, 5, 5], [2, 5, 6], [5, 11, 6], [5, 5, 6]]
[[1, 8, 2], [2, 13, 3], [2, 5, 5], [2, 5, 6], [3, 2, 5], [5, 5, 6], [5, 11, 6]]

排序不正确。

为什么?

【问题讨论】:

    标签: python bubble-sort


    【解决方案1】:

    问题是您只进行一次迭代,而在冒泡排序中,您应该一遍又一遍地迭代,直到不再有交换对为止。像这样:

    def bubble_sort(l):
        ok = False
    
        while not ok:
            ok = True
            for i in range(len(l) - 1):
                if l[i] > l[i+1]:
                    l[i], l[i+1] = l[i+1], l[i]
                    ok = False
    

    【讨论】:

    • 非常感谢~但是迭代次数不能数?
    • @bloodynumen:while 循环的数量从 1(=已排序)到 N(=按相反顺序排序)。
    【解决方案2】:

    您必须使用n 作为索引变量,而不是i。因为它是你一遍又一遍地比较相同的元素len(l) 次。试试这个:

    def bubble_sort(l):
        for i in xrange(0, len(l)) :
            for n in xrange(0, len(l)-1) :
                if l[n] > l[n+1] :
                    l[n], l[n+1] = l[n+1], l[n]
    

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 2017-03-19
      • 2016-05-17
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多