我在Python中有以下程序用于冒泡排序,该程序将通过次数和未排序列表作为输入:
def bubblesort(passnum,list=[]):
for j in range (passnum):
for i in range (len(list)):
if list[i-1]<list[i]:
continue
elif list[i-1]>list[i]:
temp=list[i]
list[i]=list[i-1]
list[i-1]=temp
list=[54,26,93,17,77,31,44,55,20]
passnum=int(input("Enter the number of passes\n"))
bubblesort(passnum,list)
print(list)
但是它在第一次通过时对列表进行排序,但在后续通过时不起作用。既然我还是Python的初学者,有人可以说出什么问题吗?
我得到了输出:
Enter the number of passes: 2
[54,17,77,31,44,55,20,26,93]
这意味着第一遍因为正确率最高的93而正确运行,但随后77应该早于93。
答案 0 :(得分:1)
首先,如@roganjosh所说
sort
当我们可以根据需要显式传递空list
时,这没有任何意义,因此我们可以在此处删除默认参数,使用Python
,也可以在没有temp
对象的情况下进行tuple
交换。
关于您的问题:具有单个参数的range
内置函数会从int
到0
生成argument - 1
个对象,因此在您的特定情况下是第一次迭代({{ 1}}),您正在比较
i = 0
在第二遍时变成list[-1] < list[0]
(因为最后一个元素是False
元素),所以我们要替换第一个和最后一个元素。
所以我们最终可以得到类似的东西
max
def bubblesort(passnum, list_):
for _ in range(passnum):
for i in range(1, len(list_)): # note that we are starting from 1 instead of 0
if list_[i - 1] < list_[i]:
continue
elif list_[i - 1] > list_[i]:
list_[i], list_[i - 1] = list_[i - 1], list_[i]