归并排序的核心思想是分治,基础算法是递归。想要学好分治,递归必须熟练。
具体思想就不讲了,贴出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]