【发布时间】:2017-06-24 12:47:09
【问题描述】:
我正在尝试对列表进行快速排序,并希望这样做。
我有以下代码并且想知道一般情况(这个问题经常出现,因为我试图解决实际列表中的列表问题,而不是复杂的返回序列或使用奇怪的索引)列表可以slice 是否允许我影响它的派生列表?做这样的事情会有更大的后果吗?
def partition(A,l,r):
p=A[l]
i=l+1
print(A)
for j in range(l+1,r):
if A[j]<p:
save=A[i]
A[i]=A[j]
A[j]=save
i+=1
save=A[i-1]
A[i-1]=A[l]
A[l]=save
return i-1
def quickSort(A,n):
if n>1:
split=partition(A,0,n)
quickSort(A[:split],len(A[:split]))
quickSort(A[split+1:],len(A[split+1:]))
print(A)
return A
A=[3,4,5,2,10,7,6,9,1]
print(quickSort(A,len(A)))
【问题讨论】:
-
列表切片始终是副本。这就是为什么
l[:]是复制整个列表的习惯用法。 -
那么有没有办法让这样的代码工作?我真的可以使用列表切片以某种方式指向列表 A 中的元素吗?
-
quickSort函数的参数数量存在差异 -
提示:python 中没有临时变量的惯用交换:
A[i], A[j] = A[j], A[i]
标签: python list sorting slice quicksort