前言
归并排序主要用到的是分而治之的思想, '分’是用递归的思想将问题小规模化, 治是将’分’出来的结果进行汇总。
代码部分
- 主函数部分
def main(array):
size = len(array)
temp = [0] * size # 用来暂存结果
ms(array, 0, size-1, temp) # 归并排序函数
- 归并排序函数
def ms(array, left, right, temp):
if left < right:
mid = (left + right) // 2
ms(array, left, mid, temp)
ms(array, mid+1, right, temp)
merge1(array, left, mid, right, temp)# 合并两段,所以分别需要首尾
- merge1函数
def merge1(array, left, mid, right, temp):
i, j, index = left, mid + 1, 0
while i <= mid and j <= right:
if array[i] <= array[j]:
temp[index] = array[i]
index += 1
i += 1
else:
temp[index] = array[j]
index += 1
j += 1
if i > mid:
for item in range(j, right+1):
temp[index] = array[item]
index += 1
elif j > right:
for item in range(i, mid + 1):
temp[index] = array[item]
index += 1
t = 0
for index in range(left, right+1):
array[index] = temp[t]
t += 1
- 验证程序:
arr = [9,8,7,6,5,4,3,2,1]
main(arr)
print(arr)