【发布时间】:2023-03-07 14:00:01
【问题描述】:
我正在阅读一些关于 Python、数据结构以及算法分析和设计的书籍。我想真正了解编码的来龙去脉,成为一名高效的程序员。很难要求这本书澄清,因此我对stackoverflow的问题。我真的发现算法和递归具有挑战性......我在下面发布了一些代码(插入排序),我试图准确地理解正在发生的事情。一般来说,我了解应该发生什么,但我并没有真正了解如何以及为什么。
通过尝试分析 Python Idle 上的代码片段,我知道:
key (holds variables) = 8, 2, 4, 9, 3, 6
还有:
i (holds the length) = 7 ( 1, 2, 3, 4, 5, 6, 7)
我不知道为什么在第一行使用 1:range(1, len(mylist))。任何帮助表示赞赏。
mylist = [8, 2, 4, 9, 3, 6]
for j in range(1,len(mylist)):
key = mylist[j]
i = j
while i > 0 and mylist[i-1] > key:
mylist[i] = mylist[i - 1]
i -= 1
mylist[i] = key
【问题讨论】:
-
维基百科文章on Insertion Sort 可能会阐明一些概念点。
-
你可以在这里观看如何做到这一点:ocw.mit.edu/courses/electrical-engineering-and-computer-science/…(可能想跳过介绍到大约 28:00)
-
这是一个错误的缩进插入排序。最后一条语句必须在 while 循环之外。
-
@rocksportrocker,这种方式仍然有效。在所有情况下,除了最后一种情况,值最终都会被下一次迭代覆盖。
-
它仍然有效,但它不是插入排序......至少它是一个比它可能的慢的实现。
标签: python algorithm sorting insertion-sort