gpt4 book ai didi

python - 选择排序不理解这段代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:09 25 4
gpt4 key购买 nike

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

 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 变量。

例如,

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。

关于python - 选择排序不理解这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57382687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com