我在网上找到了用于选择排序的代码:
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?
答案 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。