归并排序1
使用哨兵数inf来避免每一次循环步骤中都要出现数组是否结束的判断
```python import math
A1 = [2, 3, 2, 9, 4, 5, 1, 3, 2, 7, 6, 4, 13, 134, 1211]#定义待排序的一维数组
A = [A1[i:i+2] for i in range(0, len(A1), 2)]#将其每两个就分开
for i in range(len(A)):#用大小比较排序每个2元子数组
if len(A[i]) == 1:
pass
elif len(A[i]) == 2:
if A[i][0] > A[i][1]:
A[i][0], A[i][1] = A[i][1], A[i][0]
def merge(L, R):
res = []
n1 = len(L)
n2 = len(R)
L.extend([math.inf])#使用extend而非append,避免多次调用append影响性能
R.extend([math.inf])
i, j = 0, 0
for k in range(n1 + n2):
if L[i] <= R[j]:
res.append(L[i])
i += 1
else:
res.append(R[j])
j += 1
return res
while i != 1:
i = len(A) - 1
a = merge(A[i], A[i - 1])#确保在切除前merge最后两个数组元素
A = A[:-2]# 使用切片去除最后两个元素
A.append(a)
print('after sort:', A[0])#由于A处理到最后,是一个只有一个元素的数组,所以直接输出A[0]即可
该排序方法的时间复杂度为 O(n * log_2(n))。根据书中思路自编,还需后续学习改进。