我在网上找到了选择排序的代码:
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?你知道吗
使用
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变量。你知道吗例如
要查找从索引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。你知道吗
相关问题 更多 >
编程相关推荐