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

时间:2015-01-07 18:12:44

标签: python sorting loops

当我尝试学习数据排序的不同方式时,我正在看这个函数,我理解它的主要概念,包括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]

2 个答案:

答案 0 :(得分:0)

  

[什么] for循环在函数第一行的作用。是不是while循环在列表上进行迭代和比较?

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

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

答案 1 :(得分:0)

选择排序“选择”数据集中的最小元素并将其放在开头,然后在删除最小元素的列表的其余部分重复。换句话说,在选择排序的每个步骤中,我们沿列表中的每个点移动,并找出列表中该点的数字。

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