我是Python的初学者,我正在尝试在该语言中实现插入排序。但是,当我在列表上尝试我的代码进行排序时,我会得到相同的列表。我发现代码甚至没有进入第二个循环。我正在使用Python 3.以这种方式向后迭代有什么问题?
def ins_sort(us_in):
tmp = None
for key in range(1, len(us_in)-1):
for i in range(key, 0, -1):
if us_in[key] < us_in[i] and key != 0:
tmp = us_in[key]
us_in[key] = us_in[i]
us_in[i] = tmp
return us_in
print(ins_sort([5,2,4,6,1,3]))
结果:
[5,2,4,1,6,3]
答案 0 :(得分:1)
您的代码目前有2个问题。如果你无法弄清楚鼠标在黄色上面;)
一个是在这段代码中:
for key in range(1, len(us_in)-1):
您想要
for key in range(1, len(us_in)):
,以便覆盖列表中的每个元素
另一个是在这个区块中:
if us_in[key] < us_in[i] and key != 0:
tmp = us_in[key]
us_in[key] = us_in[i]
us_in[i] = tmp
当您进行迭代时,
key
将保持与您正在进行的相同。你希望它与i
一起移动,而不仅仅是保持静止。您可以将所有i
替换为i-1
,并将每个key
替换为i
以解决此问题。
答案 1 :(得分:0)
提示:在任何地方放置“打印”,这些将帮助您跟踪变量的状态。
也就是说,尝试将tmp变量放在“if”语句之外。 为了倒退,试试这个:
for i in range(end):
backwards = end - i
#do something using "backwards" instead of "i"
看起来你得到了答案,无论如何我不会删除这个,所以你可以保留小费,因为你是一个打手,打印将是你最好的朋友。相信我。
答案 2 :(得分:0)
您需要编辑主要有2行。 第3行应该是len(us_in)而不是len(us_in)-1 在if语句中它应该是 i> = 0 代替 键!= 0 第二个循环也应该从键-1开始向后{减少一次迭代}