你知道我为什么没有工作吗? [蟒蛇]

时间:2018-01-19 08:50:24

标签: python bubble-sort

我试图从头开始在python中创建一个bubblesort,你知道为什么它不起作用吗?我得到的错误列表索引超出了范围。

data = [1, 32, 50, 12, 14, 7, 45, 27, 18, 9, 19, 22, 51, 42, 4, 25, 13, 6, 21, 49, 41, 37]

def bubbleSort(alist):
    length = len(alist)
    for i in range(length):
        first = alist[i]
        second = alist[i + 1]
        if first > second:
            a, b = alist.index(first), alist.index(second)
            alist[b], alist[a] = alist[a], alist[b]


    return data

print(bubbleSort(data))

谢谢, 斯科特

3 个答案:

答案 0 :(得分:1)

将您的循环更改为:

for i in range(length-1):

因为你抓住alist [i + 1] max我应该比列表长度少2个

答案 1 :(得分:1)

检查您是否已处理最后一个元素的案例。

    first = alist[i]
    second = alist[i + 1]

第二行使用i + 1。因此,当我指向列表的最后一个索引时,第二个元素alist [i + 1]似乎不在列表索引之内。

答案 2 :(得分:0)

找到了修复:

data = [1, 32, 50, 12, 14, 7, 45, 27, 18, 9, 19, 22, 51, 42, 4, 25, 13, 6, 21, 49, 41, 37]

def bubbleSort(alist):
    length = len(alist) - 1
    while sorted(alist) != alist:
        for i in range(length):
            first = alist[i]
            second = alist[i + 1]
            if first > second:
                a, b = alist.index(first), alist.index(second)
                alist[b], alist[a] = alist[a], alist[b]


    return data

print(bubbleSort(data))