0

代码很简单

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]]

排序不正确。

为什么?

4

2 回答 2

2

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

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
于 2012-05-09T09:41:21.940 回答
1

您必须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]
于 2012-05-09T09:40:33.543 回答