for循环在这个排序函数中扮演什么角色?

2024-05-16 05:59:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学习不同的数据排序方法的同时,也在研究这个函数,我理解它的主要概念,包括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]

Tags: 数据方法函数程序概念列表forlen
2条回答

[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循环的第一次迭代中,算法将找到最小的元素;在第二次迭代中,找到第二小的元素;依此类推。你知道吗

选择排序“选择”数据集中最小的元素并将其放在开头,然后在删除最小元素的情况下在列表的其余部分重复。换言之,在选择排序的每个步骤中,我们沿着列表中的每个点移动,并计算出列表中该点的数字。你知道吗

如果我们有列表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

相关问题 更多 >