我已经编码了用于插入排序的算法,并确保它可以工作;但是,根据我打印排序列表的方式,输出是不同的。例如,
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))
当您将变量传递给函数时,将创建一个新副本。因此,当您将x
传递给函数时,将创建一个新变量L
,其值与x
相同。
现在,我们有2个不同的变量,分别命名为x
和L
。
在功能中,您正在更改L
,在功能外,您正在打印x
。因此,您得到错误的结果。因为L
已排序NOT x
。
在您的第一个代码段x = insertionSort(x)
中,将x
的值替换为函数返回的值(该值将始终是排序列表)。因此,它可以打印正确的结果。在第二个代码段中,您NOT覆盖了x
的值。因此,您得到错误的结果。