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

Python3 insertion sort iterating backwards not working

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

您的代码中目前有 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 以解决此问题。

提示:将 "prints" 放在各处,这将帮助您跟踪变量的状态。

也就是说,尝试将 tmp 变量放在 "if" 语句之外。 对于 运行 向后,试试这个:

    for i in range(end):
        backwards = end - i
    #do something using "backwards" instead of "i"

看起来你得到了答案,无论如何我不会删除它所以你可以保留小费,因为你是初学者,打印将是你最好的朋友。相信我。

您主要需要编辑两行。 第三行应该是 len (us_in) 而不是 len(us_in)-1 在 if 语句中应该是 我 >= 0 代替 键!=0 另外,第二个循环应该从键 -1 向后开始{少一次迭代}