归并排序

归并排序采用分治的思想。‘分’:将数组一分为二,分割为左右两个数组,再对每个分割后的每个数组再分别一分为二,如此分割下去直到每个数组只剩下一个元素时,便停止分割。

‘合’:从下往上沿着分割的路径对左右两个数组进行排序合并。整个流程如下图所示。同时,它和冒泡排序一样也是稳定排序,不会处理相同元素。 

下面使用Python用递归的方法实现归并排序。 

def orders(ls1,ls2):
### 对两个分块进行排序合并
	ls = []
	length1 = len(ls1)
	length2 = len(ls2)
	s1 = 0
	s2 = 0
	while s1<length1 and s2<length2:
		if ls1[s1] < ls2[s2]:
			ls.append(ls1[s1])
			s1 += 1
		else:
			ls.append(ls2[s2])
			s2 += 1
	if s1 < length1:
		ls.extend(ls1[s1:])
	if s2 < length2:
		ls.extend(ls2[s2:])
	return ls

def Guibing(ls):
### 递归实现分治
	if len(ls) <= 1:
		return ls
	mid = len(ls)//2
	left = Guibing(ls[:mid])
	right = Guibing(ls[mid:])
	res = orders(left,right)
	return res

该算法的时间复杂度为 nlogn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值