Python算法学习day7:归并排序

归并排序

1. 一次归并

在这里插入图片描述
假设现在的列表分两段有序, 如何将其合成为一个有序列表
在这里插入图片描述
选取两段列表,分成两段,然后一一比较
在这里插入图片描述
在这里插入图片描述
比较完成,这便是一次归并

2. 一次归并算法实现

def merge(li, low, mid, high):
	i = low
	j = mid + 1
	li_tmp = []
	while i <= mid and j <= high:
		if li[i] <= li[j]:
			li_tmp.append(li[i])
			i += 1
		if li[i] >= li[j]:
			li_tmp.append(li[j])
			j += 1
	while i <= mid:
		li_tmp.append(li[i])
		i += 1
	while j <= high:
		li_tmp.append(li[j])
		j += 1
	for i in range(low, high+1):
		li[i] = li_tmp[i-low]

例题:已知两个有序列表,实现将这两个列表合并排序

代码实现

def merge_sort(li1, li2):
	i = 0
	j = 0
	li = []
	while i < len(li1) and j < len(li2):
		if li[i] >= li[j]:
			li.append(li[j])
			j += 1
		else:
			li.append(li[i])
			i += 1
	while i < len(li1):
		li.append(li[i])
		i += 1
	while j < len(li2):
		li.append(li[j])
		j += 1
		

归并排序算法实现

def merge_sort(li, low, high):
	if low < high:
		mid = (low + high) // 2 
		merge_sort(li, low , mid)
		merge_sort(li, mid + 1, high)
		merge(li, low, mid, high)
		
def merge(li, low, mid, high):
	i = low
	j = mid + 1
	li_tmp = []
	while i <= mid and j <= high:
		if li[i] <= li[j]:
			li_tmp.append(li[i])
			i += 1
		if li[i] >= li[j]:
			li_tmp.append(li[j])
			j += 1
	while i <= mid:
		li_tmp.append(li[i])
		i += 1
	while j <= high:
		li_tmp.append(li[j])
		j += 1
	for i in range(low, high+1):
		li[i] = li_tmp[i-low]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值