def merge(a, b):
c = [] #定义空列表
h = j = 0 #定义双列表的下标初始值
while j < len(a) and h < len(b): #如果初始值都小于列表长度的话
if a[j] < b[h]: #获取列表的下标值进行比较 如果a下标值小于 b下标的值 把a存c
c.append(a[j])
j += 1 # 给下标初始值加1操作
else: #反过来加 b
c.append(b[h])
h += 1
if j == len(a): #最后判断 j等于 列表长度的话
for i in b[h:]:
c.append(i)
else:
for i in a[j:]:
c.append(i)
return c
def merge_sort(lists):
#判断lists 是否长度为1
if len(lists) <= 1:
return lists
#长度大于1 取中间值
middle = len(lists)//2
#递归调取lists的中间值的左半部分
left = merge_sort(lists[:middle])
#递归获取中间值的右半部分
right = merge_sort(lists[middle:])
#调用上面的算法函数 进行合并
return merge(left, right)
if __name__ == '__main__':
a = [1,2,3,53,21,11,32,55,765,77]
print (merge_sort(a))
python 二路归并 排序算法
最新推荐文章于 2024-05-04 10:50:24 发布