vlambda博客
学习文章列表

Day 20: 归并排序算法

Day 20 归并排序算法

Day 19 合并两个有序数组作业总结

合并两个有序数组

利用两个数组原本已经有序的特点:

def merge(left, right):
    i = 0
    j = 0
    temp = []
    while i <= len(left) - 1 and j <= len(right) - 1:
        if left[i] <= right[j]:
            temp.append(left[i])
            i += 1
        else:
            temp.append(right[j])
            j += 1
    temp += left[i:] + right[j:]
    return temp

print(merge([1,3,4],[2,3,3])) 

思路可参考示意图:

Day20 写出归并排序算法

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

归并排序算法的核心正是 Day 19 的合并两个有序数组,补全如下代码:

def merge_sort(lst):
    #
    #
    #
    return lst_sorted

归并排序两阶段:

先分,直到长度1,然后再合:

Day 20: 归并排序算法

归并排序的详细讲解,可参考:https://www.programiz.com/dsa/merge-sort

长按二维码关注


欢迎加入星球,从零学程序员必备算法,每天在星球内记录学习过程、学习星友超赞的回答,还会不定期送精华资料!打卡 300 天,退还除平台收取的其他所有费用。

长按二维码,查看我的星球