for循环在这个排序函数中的作用是什么?

What is the role of the for loop in this sorting function?

我正在研究这个函数,同时我尝试学习不同的数据排序方式,并且我理解它的主要概念,包括 while 循环。我唯一不明白的是函数第一行的 for 循环的作用。 while 循环不是在对列表进行迭代和比较吗?我尝试退出 for 循环,并假设程序无法排序。它运行没有错误,但只是返回相同的列表,没有改变。如果这对我来说没有意义,我想我一定不能完全理解这种类型。所以我的问题是:for循环在这个排序函数中的作用是什么,每次通过它会影响什么?

def selSort(L):
    for i in range(len(L) - 1):
        minIndex = i
        minValue = L[i]
        j = i + 1
        while j < len(L):
            if minValue > L[j]:
                minIndex = j
                minValue = L[j]
            j += 1
        temp = L[i]
        L[i] = L[minIndex]
        L[minIndex] = temp
    return L

Q = [2, 8, 5, 9, 1, 15, 3, 7]
selSort(Q)
print Q

输出:

[1, 2, 3, 5, 7, 8, 9, 15]

[What is] the role of the for loop on the first line of the function. Isn't the while loop doing the iterating and comparisons on the list?

while 循环为列表中的一个特定位置找到正确的元素 for 循环重复搜索 对于每个位置(从而对列表进行排序)。

if 条件所做的只是找到尚未放置的元素中的最小元素。因此,在 for 循环的第一次迭代中,算法将找到最小的元素;在第二次迭代中,第二小;等等。

选择排序"selects" 数据集中最小的元素并将其放在开头,然后在删除最小元素的列表的其余部分重复。换句话说,在选择排序的每一步,我们沿着列表中的每个位置移动,并找出列表中那个位置应该是什么数字。

如果我们有列表 7 5 2 3 4 6 9 1 8,那么我们的第一步是将 1 交换到第一位,将 2 交换到第二位,依此类推。我们不必担心列表中的最后一个位置,因为如果我们把所有其他的都放在正确的位置,最后一个元素将在正确的位置,因为它是唯一剩下的。

使用这段代码,虽然没有做得那么清楚,但外部 for 循环会遍历列表中的每个位置,减去最后一个位置 (len(L) - 1)。一旦我们通过循环内的代码一次,我们就会把正确的数字放在第一个位置,然后我们再次尝试填充第二个位置,等等。因为我们已经把所有的东西都放在正确的位置了在这个之前的点中,我们可以假设这个点中正确的东西将是这个位置和列表末尾之间的最小项目,因此,while 循环有助于查找它。然后,我们交换这两个项目。

这段代码有点乱,如果我们将内部 while 循环改写为 for 循环可能更有意义:

def selSort(L):
    for i in range(len(L) - 1):
        minIndex = i
        minValue = L[i]
        for j in range(i + 1, len(L)):
            if minValue > L[j]:
                minIndex = j
                minValue = L[j]
        temp = L[i]
        L[i] = L[minIndex]
        L[minIndex] = temp
    return L