#python解法
def zuhe(erwei_list):
# 传入的是二维数组 类似 第一次[[1],[4],[6],[2]]
# 返回 [[1,4],[2,6]]同时也是第二次传入的数据
#当最后返回的[[1,2,4,6]]二维数组的长度为1时,迭代循环结束
new_erwei_erwei = []
#当传入的数据为奇数时,需要最后一位数字不加入计算
if len(erwei_list)%2 !=0 and len(erwei_list)!=1:
new_erwei_erwei.append(erwei_list[0])
del erwei_list[0]
# 当长度为1就返回
if len(erwei_list) == 1:
return erwei_list[0]
for yiwei in range(0,len(erwei_list),2):
# 设置步长为2
new_erwei = []
while True:
# 此处当列表的长度为0时,再取会保存的,需要加条件
if len(erwei_list[yiwei]) >=1 and len(erwei_list[yiwei+1]) >=1:
if erwei_list[yiwei][0] < erwei_list[yiwei+1][0]:
new_erwei.append(erwei_list[yiwei][0])
del erwei_list[yiwei][0]
else:
new_erwei.append(erwei_list[yiwei+1][0])
del erwei_list[yiwei+1][0]
# 当某一方的长度为0时,直接将另一个列表的所有数据都加入列表中
if len(erwei_list[yiwei])==0 and len(erwei_list[yiwei+1])!=0:
for index,value in enumerate(erwei_list[yiwei+1]):
new_erwei.append(value)
del erwei_list[yiwei+1][index]
if len(erwei_list[yiwei])!=0 and len(erwei_list[yiwei+1])==0:
for index,value in enumerate(erwei_list[yiwei]):
new_erwei.append(value)
del erwei_list[yiwei][index]
# 什么时候退出循环???
# 当俩个列表中的长度都为0时,才退出
if len(erwei_list[yiwei]) ==0 and len(erwei_list[yiwei+1])==0:
break
new_erwei_erwei.append(new_erwei)
return zuhe(new_erwei_erwei)
jieguo = zuhe([[1],[6],[2]])
print(jieguo)
算法解集--归并算法
最新推荐文章于 2024-02-07 10:01:44 发布