Python3插入排序向后迭代不起作用

时间:2016-07-14 17:59:58

标签: python python-3.x insertion-sort

我是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]

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开始向后{减少一次迭代}