这是一个正确的插入排序吗?

时间:2016-02-07 15:52:54

标签: python algorithm sorting insertion

这是我在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]?但这似乎并没有使排序出错。

1 个答案:

答案 0 :(得分:0)

alis列表包含对其他对象的引用; alis[2]引用了int对象4。设置currel = alis[2]会创建对该同一对象的另一个引用。

但是,将alis[2]更改为引用其他对象不会影响currel。您没有更改对象4,而是更改列表对象引用的内容。因此,currel不会改变。 currel继续引用对象4,未更改。

您可能希望阅读Ned Batchelder在他的Python Conference 2015演示文稿中提供的(优秀)解释:Python Names and Values。您还可以使用pythontutor.com来可视化变量的变化;见your code on that site