您的位置:首页 > 编程语言 > Python开发

归并排序(python)

2017-10-09 20:05 190 查看
def merge(A, B):
'''
合并两个已排序的数组

Args:
list A:已排序数组A
list B:已排序数组B

Returns:
list result: 已合并的有序数组
'''
i,j = 0,0
result = []
while i<len(A) and j<len(B):
if A[i]<B[j]:
result.append(A[i])
i += 1
else:
result.append(B[j])
j += 1
result += A[i:]
result += B[j:]
return result

def merge_sort(A):
'''
归并排序
思路:
不断递归, 直到只有一个数值, 归并排序可以不要将一个数与其他所有的额数对照, 减少操作次数
'''
if len(A)==1:
#当最后为叶子节点时候返回数组
return A
else:
m = len(A)//2
#构造左二叉树
left = merge_sort(A[:m])
#构造右二叉树
right = merge_sort(A[m:])
#合并左右
return merge(left, right)


测试:
A = [22,12,45,25,56]
print(merge_sort(A))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: