Python基础算法之归并排序


Python基础算法之归并排序


该算法采用经典的分治策略,将问题分解成一些小问题然后递归分解,而治的阶段将各个阶段修补在一起

时间复杂度:O(N*logN) 空间复杂度:O(N)

#先拆分,之后再和回去

def Merge(arr): #先分为两部分
    n = len(arr)
    if n <= 1:
        return arr
    
    middle = int(n/2)                      #中间分一半
    left_arr = Merge(arr[:middle])    #左边那一部分
    right_arr = Merge(arr[middle:])   #右边那一部分
    return MergeSort(left_arr, right_arr)  


def MergeSort(left, right): #left和right是左右数组
    arr_new = []
    i = j = 0           #用i,j分别代表指针指向左右数组    
    n = len(left)
    while i<len(left) and j<len(right):
        if left[i]<right[j]:
            arr_new.append(left[i])
            i+=1            #指针谁小谁移动
        else:
            arr_new.append(right[j])
            j+=1

    if i==len(left):
        for x in right[j:]:
            arr_new.append(x)
    else:
        for x in left[i:]:
            arr_new.append(x)

    return arr_new

print(Merge([1, 36, 7, 102, 54, 98]))

猜你喜欢

转载自blog.csdn.net/weixin_43734271/article/details/89237954