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