修改后的随机快速排序-不返回

时间:2019-04-12 16:04:05

标签: python quicksort

我有一项作业要写一个修改后的快速排序。我知道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))  

1 个答案:

答案 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)