你知道为什么我的气泡排序不起作用吗?[蟒蛇]



我正在尝试从头开始在python中制作一个气泡排序,你知道为什么它不起作用吗?我使错误列表索引超出范围。

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

谢谢斯科特

循环更改为:

for i in range(length-1):

既然你抓住了 alist[i + 1] 最大值,我应该比列表长度少 2

检查您是否处理了最后一个元素的情况。

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

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

找到了修复程序:

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

最新更新