是否可以使用quicksort计算计数反转次数?

Arc*_*her 3 python algorithm mergesort quicksort

我已经使用mergesort解决了这个问题,现在我在想是可以使用quicksort来计算数字吗?我也编写了快速排序,但我不知道如何计算.这是我的代码:

def Merge_and_Count(AL, AR):
    count=0
    i = 0
    j = 0
    A = []
    for index in range(0, len(AL) + len(AR)):        
        if i<len(AL) and j<len(AR):
            if AL[i] > AR[j]:
                A.append(AR[j])
                j = j + 1
                count = count+len(AL) - i
            else:
                A.append(AL[i])
                i = i + 1
        elif i<len(AL):
            A.append(AL[i])
            i=i+1
        elif j<len(AR):
            A.append(AR[j])
            j=j+1
    return(count,A)

def Sort_and_Count(Arrays):
        if len(Arrays)==1:
            return (0,Arrays)
        list1=Arrays[:len(Arrays) // 2]
        list2=Arrays[len(Arrays) // 2:]
        (LN,list1) = Sort_and_Count(list1)
        (RN,list2) = Sort_and_Count(list2)
        (M,Arrays)= Merge_and_Count(list1,list2)
        return (LN + RN + M,Arrays)
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 5

通常不会,因为在分区过程中,当您将值移动到枢轴的正确一侧时,您不知道它移动过去的值有多少小于它,有多少值更大.因此,只要您这样做,就会丢失有关原始输入中的反转次数的信息.