归并排序思路见百度百科:https://baike.baidu.com/item/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/1639015?fr=aladdin
归并排序的代码实现有递归和循环两种,其中循环的代码思路如下:
- 对于循环思路来讲,只有归并思路的并,没有分。这是因为,在分的过程中,任意元素的位置都没有发生变化,故一个序列可直接看做是已被分解的
- 创建合并函数用于合并两个有序序列,输出结果为一个有序序列
- 循环调用合并函数,从序列两个元素合并为一个序列,两个序列合并为一个序列。。。。直至最后合并为一个序列
代码如下:
def merge_sort(args):
args_len=len(args)
while args_len>1:
i,list_args=0,[]
while i<args_len:
args1=args[i]
try:
args2=args[i+1]
except:
args2=[]
list_args.append(merge(args1,args2))
i+=2
args_len=len(list_args)
args=list_args
return args[0]
#创建合并有序序列函数
def merge(args1,args2):
list_args=[]
dd = float("inf")
for args in [args1,args2]:
if type(args).__name__ in ('int','float'):
list_args.append([args])
else:
list_args.append(list(args))
args=[]
args1,args2=list_args[0],list_args[1]
args1.append(dd)
args2.append(dd)
while True:
if args1[0]<args2[0]:
args.append(args1[0])
args1.pop(0)
else:
args.append(args2[0])
args2.pop(0)
if len(args1)==0 or len(args2)==0:
args=args+args1+args2
args.pop()
args.pop()
return args
测试一下:
list3=[2, 3, 1, 3, 5, 10, 3, 23, 442]
merge_sort(list3)
Out[87]: [[1, 2, 3, 3, 3, 5, 10, 23, 442]]

本文深入探讨了归并排序的循环实现方式,详细讲解了如何通过不断合并有序子序列来构建完整有序序列的过程,提供了具体代码示例,并通过实例验证了算法的有效性。
3134

被折叠的 条评论
为什么被折叠?



