相同的打印语句为排序算法(插入排序)提供了不同的输出

问题描述 投票:0回答:1

我已经编码了用于插入排序的算法,并确保它可以工作;但是,根据我打印排序列表的方式,输出是不同的。例如,

x = some_unsorted_list
x = insertionSort(x)
print(x)

将打印排序的列表就好了。另一方面,

x = some_unsorted_list
insertionSort(x)
print(x)

将打印部分未排序的列表。这是我的选择排序代码:

def insertionSort(L):
    endList = len(L) - 1 

    for i in range(1,endList+1,1): 
        insertVal = L[i]  
        j = i - 1 

        while j >= 0 and L[j] > insertVal:
            L[j+1] = L[j]    
            j -= 1          
        L[j+1] = insertVal  
    #print(L)
    return L

请注意,注释掉的打印语句始终提供排序列表,这引起了我的困惑。

编辑(我遗漏的重要信息:):这就是我所说的插入排序的方式。让v1,v2和v3成为未排序的列表。

for i in [v1,v2,v3]:
    x = list(i)
    insertionSort(x)
    print(x) 

回想一下,这是发生错误的地方。但是,以下代码没有会产生错误:

print(insertionSort(v1))
print(insertionSort(v2))
print(insertionSort(v3))
python list sorting output
1个回答
2
投票

当您将变量传递给函数时,将创建一个新副本。因此,当您将x传递给函数时,将创建一个新变量L,其值与x相同。

现在,我们有2个不同的变量,分别命名为xL

在功能中,您正在更改L,在功能外,您正在打印x。因此,您得到错误的结果。因为L已排序NOT x

代码之间的差异

在您的第一个代码段x = insertionSort(x)中,将x的值替换为函数返回的值(该值将始终是排序列表)。因此,它可以打印正确的结果。在第二个代码段中,您NOT覆盖了x的值。因此,您得到错误的结果。

© www.soinside.com 2019 - 2024. All rights reserved.