从返回元组中提取换位计数

时间:2018-01-07 00:31:52

标签: python sorting

我试图通过计算排序中的转置来确定排列是奇数还是偶数。具体来说,我想在附加的代码中使用int b+c+d,这样在调用SortCount(A)函数时,它会输出TrueFalse的输出基于该值是奇数还是偶数。

在包含的代码中返回的元组给出了排序的数组以及从该数组的原始配置中对该数组进行排序所需的转置次数。我对使用元组和编程有一点新意,并且我不确定如何使转置号可用于执行上述操作。从B, b+c+d的返回行操作SortCount(A)会破坏代码。代码附后。

def SortCount(A):
    l = len(A)
    if l > 1:
        n = l//2
        C = A[:n]
        D = A[n:]
        C, c = SortCount(A[:n])
        D, d = SortCount(A[n:])
        B, b = MergeCount(C,D)
        return B, b+c+d
    else:
        return A, 0

def MergeCount(A,B):
    count = 0
    M = []
    while A and B:
        if A[0] <= B[0]: 
          M.append(A.pop(0)) 
        else: 
          count += len(A)
          M.append(B.pop(0)) 
    M  += A + B     
    return M, count 

1 个答案:

答案 0 :(得分:0)

此代码可以正常工作。

def is_even(p):

    s=SortCount(p)
    return s[1]%2==0

def SortCount(p):

    l = len(p)
    if l > 1:
        n = l//2
        C = p[:n]
        D = p[n:]
        C, c = SortCount(p[:n])
        D, d = SortCount(p[n:])
        B, b = MergeCount(C,D)
        return B, b+c+d
    else:
        return p, 0

def MergeCount(p,B):

    count = 0
    M = []
    while p and B:
        if p[0] <= B[0]: 
          M.append(p.pop(0)) 
        else: 
          count += len(p)
          M.append(B.pop(0)) 
    M  += p + B     
    return M, count