这是正确的插入排序吗?

2024-09-30 10:43:02 发布

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

这是我在Python中对插入排序的尝试:

def insert(alis):
    for i in range(1,len(alis)):
        currel = alis[i]
        j = i
        while j > 0 and alis[j]<alis[j-1]:
            alis[j] = alis[j-1]
            alis[j-1]= currel
            j=j-1
    print (alis)

alis = [3,2,6,2,1,678,23,98]
insert(alis)

这似乎管用,但让我困惑的是

alis = [4,3,2,1]

i = 1之后,alis = [3,4,2,1]。所以当alis[2]被设置为4时,currel的值是否会从2变为4?所以你会得到[3,4,4,1]?但这似乎并没有让这类事情出错。你知道吗


Tags: andinforlendefrange事情insert
1条回答
网友
1楼 · 发布于 2024-09-30 10:43:02

alis列表包含对其他对象的引用;alis[2]引用int对象4。设置currel = alis[2]将创建对同一对象的另一个引用。你知道吗

但是,将alis[2]更改为引用另一个对象不会影响currel。您没有更改对象4,而是更改列表对象引用的内容。因此,currel不变。currel继续引用对象4,保持不变。你知道吗

您可能需要阅读Ned Batchelder在其Python会议2015演示文稿中给出的(出色的)解释:Python Names and Values。你也可以使用pythontutor.com可视化变量发生了什么;参见your code on that site。你知道吗

相关问题 更多 >

    热门问题