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]
发布了126 篇原创文章 · 获赞 35 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43442524/article/details/104044450