选择排序不理解此代码

2024-09-27 21:24:22 发布

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

我在网上找到了选择排序的代码:

 def selectionSort(alist):
    for fillslot in range(len(alist)-1,0,-1):
        positionOfMax=0
        for location in range(1,fillslot+1):
            if alist[location]>alist[positionOfMax]:
                positionOfMax = location

        temp = alist[fillslot]
        alist[fillslot] = alist[positionOfMax]
        alist[positionOfMax] = temp

 alist = [54,26,93,17,77,31,44,55,20]
 selectionSort(alist)
 print(alist)

列表长度=9

我不明白这些代码行:

 for fillslot in range(len(alist)-1,0,-1):

以及

 for location in range(1,fillslot+1):

对于fillslot,如果我们从这些范围出发,就意味着我们在看索引:8,7,6,5,4,3,2,1为什么不看索引0?你知道吗

同样对于位置变量,我们将看到1,2,3,4,…fillslot 再说一遍,为什么我们不看索引0?你知道吗


Tags: 代码inforlenif排序defrange
1条回答
网友
1楼 · 发布于 2024-09-27 21:24:22

使用for fillslot in range(len(alist)-1,0,-1):,我们从右到左查看索引。当我们在位置(i)时,我们将找到从索引0到索引i的最大数,并将最大数与元素alist[i]交换。你知道吗

如果我们这样做,那么索引从0到i的所有元素都小于索引i+1到len(alist)-1的所有元素。你知道吗

在处理索引1之后,alist[0]将小于从1到len(alist)-1的任何元素,因此我们不需要考虑索引0。你知道吗

现在使用for location in range(1,fillslot+1):,我们找到从索引0到索引i的最大数。为了找到最大数,我们首先让0的索引数作为最大值为此,我们声明了一个名为positionOfMax=0的变量来保存最大数的索引。然后我们比较从位置1到i的其他数字,并更新positionOfMax变量。你知道吗

例如

alist=[2,5,3,9]

要查找从索引0到索引2的最大值,请执行以下操作:
设positionOfMax=0,表示最大值在0处。
现在检查从1到2的位置。你知道吗

当我们在位置1时,alist[1]大于alist[positionOfMax],所以positionOfMax将更新1。现在最大位置是1。你知道吗

当我们在位置2时,alist[1]小于alist[positionOfMax],所以positionOfMax不会被更新。所以最大位置仍然是1。你知道吗

所以从索引0到索引2的最大值在位置1。 我想现在很清楚为什么for循环要避免索引0。你知道吗

相关问题 更多 >

    热门问题