计算倒数

时间:2019-01-21 19:40:05

标签: python algorithm

我想构建分而治之的算法,该算法计算许多反转。这是我的代码,该代码基于merge-sort:

def merge_sort(array):
    if len(array)<=1:
        return array

    mid = len(array)//2

    left_array = merge_sort(array[:mid])
    right_array = merge_sort(array[mid:])
    res = merge(left_array,right_array)

    return res


def merge(left_array, right_array): 
    global inversions
    inversions = 0
    result = []
    i = j = 0


    while i < len(left_array) and j < len(right_array):
        if left_array[i] <= right_array[j]:
            result.append(left_array[i])
            i+=1


        else:
            result.append(right_array[j])
            inversions += len(left_array[i:])
            print(right_array[j],left_array[i])
            j +=1


    result.extend(left_array[i:])
    result.extend(right_array[j:])
    return result


test = [5 ,2 ,10 ,8 ,1 ,9 ,4 ,3 ,6 ,7]

#test = [1,3,5,2,4,6]

merge_sort(test)
inversions

就我而言,我有11岁,但应该是22岁。

例如,我们有一个数组[1,3,5,2,4,6]。通过分而治之的方法(合并排序),我们将该数组分为两部分。在第一步中,我们选择元素1作为最小的元素,将其插入新数组并从左侧数组中删除。第二步,最小的元素是2(右数组)。在这里,我们看到,在左侧数组中有2个元素。这意味着,我们有2个反演,其中涉及元素2。 主要思想是,如果我们从右边的元素中选择一个元素,则反转数=元素的数量,即在左侧数组中为lefr。

我已尝试在代码中实现此逻辑,但无法正常工作。你能帮我发现我的错误吗?

0 个答案:

没有答案