【算法】归并排序

归并排序的核心思想是分治,基础算法是递归。想要学好分治,递归必须熟练。

具体思想就不讲了,贴出Python实现的代码(其中加了print来显示计算过程):

def _merge_sorted(nums):
#     print("nums is :" + str(nums))
    if(len(nums) <= 1):
        return nums
    
    m = len(nums)//2
#     print("m is:" + str(m))
    a = _merge_sorted(nums[:m])
    b = _merge_sorted(nums[m:])
    return merge(a, b)

def merge(a, b):
    temp = []
    i = 0
    j = 0
    while (i < len(a) and j < len(b)):
        if(a[i] < b[j]):
            temp.append(a[i])
            i += 1
        else:
            temp.append(b[j])
            j += 1
    if(i < len(a)):
        temp = temp + a[i:]
        
    if(j < len(b)):
        temp = temp + b[j:]
#     print("a is: " + str(a))
#     print("b is: " + str(b))
#     print("temp is:" + str(temp))
    return temp


li = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
_merge_sorted(li)
nums is :[1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
m is:5
nums is :[1, 3, 5, 7, 9]
m is:2
nums is :[1, 3]
m is:1
nums is :[1]
nums is :[3]
a is: [1]
b is: [3]
temp is:[1, 3]
nums is :[5, 7, 9]
m is:1
nums is :[5]
nums is :[7, 9]
m is:1
nums is :[7]
nums is :[9]
a is: [7]
b is: [9]
temp is:[7, 9]
a is: [5]
b is: [7, 9]
temp is:[5, 7, 9]
a is: [1, 3]
b is: [5, 7, 9]
temp is:[1, 3, 5, 7, 9]
nums is :[2, 4, 6, 8, 0]
m is:2
nums is :[2, 4]
m is:1
nums is :[2]
nums is :[4]
a is: [2]
b is: [4]
temp is:[2, 4]
nums is :[6, 8, 0]
m is:1
nums is :[6]
nums is :[8, 0]
m is:1
nums is :[8]
nums is :[0]
a is: [8]
b is: [0]
temp is:[0, 8]
a is: [6]
b is: [0, 8]
temp is:[0, 6, 8]
a is: [2, 4]
b is: [0, 6, 8]
temp is:[0, 2, 4, 6, 8]
a is: [1, 3, 5, 7, 9]
b is: [0, 2, 4, 6, 8]
temp is:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

点赞