def insertionSort(lst):
#create variable to store final sorted list
sortedLst = []
#add any number into the list so the program can start inserting
sortedLst.append(lst.pop())
#for each item left over in the original list compare to sorted list
for sortInd in range(len(lst)-1,-1,-1):
#for each index to sort
for sortingInd in range(len(sortedLst),-1,-1):
if sortingInd == 0 or sortingInd == len(sortedLst):
sortedLst.insert(sortingInd,lst.pop())
break
if lst[sortInd] > sortedLst[sortingInd]:
sortedLst.insert(sortingInd,lst.pop())
break
print(sortedLst) #gives [1,2,3]
print(lst) #gives []
lst = sortedLst
print(lst) #gives [1,2,3]
lst = [3,2,1]
insertionSort(lst)
#lst should be [1,2,3] yet gives []
print(lst)
我正在尝试编写插入排序,插入排序本身确实有效,因为这是我编程的更多种类的一部分,我特别不希望为函数外部的排序列表声明一个新变量并且具有函数返回一个排序列表以与我的其他函数一致。我不想要:
lst = [3,2,1]
newLst = insertionSort(lst)
相反,我希望insertSort函数更改我原来的lst变量,当我弹出值进行排序时它会发生变化,但是当我在函数结束之前将它设置为sortedLst时它不会改变。
提前感谢您的任何答案:)。
答案 0 :(得分:0)
你根本不会改变任何全局变量。
您可以通过在lst
函数中将insertionSort
声明为全局来解决此问题,但我不确定您为什么要这样做;只需返回sortedLst
并打印出来就好了。