我有一项作业要写一个修改后的快速排序。我知道partition2函数是正确的,所以错误必须来自其他地方(我认为...)。
我输入的任何列表都“无”。任何帮助将非常感激!
代码如下:
import numpy.random as rand
def randPartition(A,p,r):
randIndex = rand.randint(p,r+1)
(A[randIndex],A[r])=(A[r],A[randIndex])
return partition2(A,p,r)
def partition2(A,p,r):
x = A[r]
i1 = p-1
i2 = p-1
for j in range(p,r):
if A[j]==x:
i2+=1
(A[i2],A[j])=(A[j],A[i2])
elif A[j]<x:
i1+=1
i2+=1
(A[i1],A[j])=(A[j],A[i1])
i2+=1
(A[i2],A[r])=(A[r],A[i2])
return (i1+1,i2)
def randQuickSort2(A):
def randQuickSortRec(A,p,r):
if p<r:
q = randPartition(A,p,r)
randQuickSortRec(A,p,q[0]-1)
randQuickSortRec(A,q[1]+1,r)
randQuickSortRec(A,0,len(A)-1)
A3=[0,1,2,0,1,2,0,1,2,1]
A4=[5,6,5,5,1,3,5,2,1,7,9,5,15,100,5, 2,17,5,56]
print(randQuickSort2(A3))
print(randQuickSort2(A4))
答案 0 :(得分:3)
您的代码正在就地修改列表。这些方法不返回任何内容-这就是为什么您得到None
尝试打印列表。或这样:
def randQuickSort2(A):
def randQuickSortRec(A,p,r):
if p<r:
q = randPartition(A,p,r)
randQuickSortRec(A,p,q[0]-1)
randQuickSortRec(A,q[1]+1,r)
return A
return randQuickSortRec(A,0,len(A)-1)