选择排序不了解此代码

时间:2019-08-06 19:20:40

标签: python algorithm sorting

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

 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):

对于填充槽,如果我们离开这些范围,则意味着我们正在查看索引:8,7,6,5,4,3,2,1为什么我们不查看索引0?

还有位置变量,我们将查看1,2,3,4,... fillslot 再次为什么我们不看索引0?

1 个答案:

答案 0 :(得分:1)

使用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。现在positionOfMax为1。

当我们位于位置2时,alist [1]小于alist [positionOfMax],因此positionOfMax将不会更新。因此positionOfMax仍为1。

因此,从索引0到索引2的最大数字位于位置1。 我认为现在很清楚为什么for循环会避免使用索引0。