我正在尝试从头开始在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))