我试图从头开始在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))
谢谢, 斯科特
答案 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))