如何解决如何在Python中的选择排序递归中返回交换数量的值
代码:
def selection(list,i,j,flag,swapNumber):
size = len(list)
if (i < size - 1):
if (flag):
j = i + 1;
print(list)
if (j < size):
if (list[i] > list[j]):
swapNumber +=1
print(swapNumber)
list[i],list[j]=list[j],list[i]
print(list)
selection(list,j + 1,swapNumber);
else:
selection(list,i + 1,i+2,1,swapNumber);
return(swapNumber)
swapNumber = 0
list = [6,2,3,7,1]
numSwap = selection(list,swapNumber)
print(list)
print(numSwap)
因此,我试图返回swapNumber的值,但在打印时仅显示1。我试图将return(swapNumber)放在其他地方似乎没有帮助。 有人可以帮忙吗?
解决方法
传递给函数swapNumber
的{{1}}是selection
而非by value
。
一种可能的解决方案是将其声明为by reference
:
global
,
一种令人讨厌的方法是在函数内部定义一个函数并使用nonlocal
。看起来像这样:
def selection_sort(list_):
swaps = 0
def selection(list_,i,j,flag):
nonlocal swaps
size = len(list_)
if i < size - 1:
if flag:
j = i + 1
if j < size:
if list_[i] > list_[j]:
swaps += 1
list_[i],list_[j] = list_[j],list_[i]
selection(list_,j + 1,0)
else:
selection(list_,i + 1,i + 2,1)
return swaps
return selection(_list,1,1)
好处还在于,您无需将0,1
作为初始参数,而只需将列表本身进行排序即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。