def merger_sort(s): # 待排序数组
def merges(low, mid, high):
q = [0] * (high - low + 1)
i, j, k = low, mid + 1, 0
while (i <= mid) & (j <= high):
if s[i] < s[j]:
q[k] = s[i]
i += 1
else:
q[k] = s[j]
j += 1
k += 1
if i == mid + 1:
q[k:] = s[j:high + 1]
else:
q[k:] = s[i:mid + 1]
s[low:high + 1] = q
n = len(s)
part = [[0, int((n-1)/2), n-1]] # 最开始的分割
for value in part:
low = value[0]
mid = value[1]
high = value[2]
if high - low > 2:
part.append([low, int((low+mid)/2), mid])
part.append([mid + 1, int((high+mid+1)/2), high])
if high - low == 2:
part.append([low, int((low+mid)/2), mid])
while part:
[l, m, h] = part.pop(-1)
merges(l, m, h)
return s
s = [2, 4, 6, 3, 1, 5, 3, 7, 9, 8]
print(merger_sort(s))
[1, 2, 3, 3, 4, 5, 6, 7, 8, 9]