【发布时间】:2017-11-06 14:32:21
【问题描述】:
我正在 Python 中实现快速排序,我对此没有什么问题。 我的函数以递归方式完美运行,但它不会返回有序数组,而只返回原始数组。
在我的代码中,我有两个版本的快速排序。 quickSort_2 工作正常并对列表进行排序。取而代之的是 quickSort_1 的工作原理与 quicksort_1 完全相同,但会返回原始数组。
知道为什么会这样吗?
import random
import list
def partition(A,p):
pivot=A[p]
sup=0
inf=len(A)-1
while sup!=inf:
while A[sup]<pivot:
sup+=1
while A[inf]>pivot:
inf-=1
list.swap(inf,sup,A) #swap
print A
return sup
def quickSort_1(A):
if len(A)<=1:
return A
r=random.choice(range(0,len(A)-1))
print A
m=partition(A,r)
return quickSort_1(A[:m+1])+quickSort_2(A[m+1:])
def quickSort_2(A):
if len(A)<=1:
return A
r=random.choice(range(0,len(A)-1))
print A
m=partition(A,r)
quickSort_1(A[:m+1])
quickSort_2(A[m+1:])
return A
【问题讨论】:
-
请检查最后一段好吗?我认为您以错误的方式使用了一些方法:P。哪个运行良好,哪个返回状态不佳?无论如何,我认为第二个版本有问题。原因是您正在为数组的每个部分计算 quickSort 但返回原始部分 A.尝试附加两个调用的结果并返回。
标签: python sorting recursion quicksort