归并排序,顾名思义,拆分再合并。
假设此时有两段分别有序的数,通过比较从某一段中拿出较小的一个数,即此时最小的数,放到一个新的列表中,依次执行就能得到一个有序的列表
此时我们假设有两段有序的列表,进行一次排序的代码如下:
def merge(li, low, mid, high):
i = low
j = mid + 1
tmp = []
while i <= mid and j <= high:
if li[i] <li[j]:
tmp.append(li[i])
i += 1
else:
tmp.append(li[j])
j +=1
while i<= mid:
tmp.append(li[i])
i +=1
while j <= high:
tmp.append(li[j])
j +=1
li[low:high+1] = tmp
那么?给定两段列表如何保证列表有序?
分解,将列表越分越小,直至一个元素
终止条件,一个元素是有序的
合并,将两个有序的列表合并,列表越来越大
所以用到了递归
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)