归并排序的意义及使用
- 假设现在的列表分两段有序,如何将其合称为一个有序列表
![在这里插入图片描述](https://img-blog.csdnimg.cn/68e7a410e4564508831b423e620814c1.png)
def merge(li, low, mid, high):
i = low
j = mid + 1
ltmp = []
while i<=mid and i<=high:
if li[i] < li[j]:
ltmp.append(li[i])
i += 1
else:
ltmp.append(li[j])
j += 1
while i <= mid:
ltmp.append(li[i])
i += 1
while j <= high:
ltmp.append(li[j])
j += 1
li[low:high+1] = ltmp
li = [2,4,5,7,1,3,6,8]
merge(li, 0, 3, 7)
print(li)
如何使用归并
- 分解:将列表越分越小,直至分成一个元素
- 终止条件:一个元素是有序的
- 合并:将两个有序列表归并,列表越来越大
- 时间复杂度为O(logn),空间复杂度为O(n)
![在这里插入图片描述](https://img-blog.csdnimg.cn/724e49112034410eb655d037aa647df5.png)
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)
li = list(range(100))
import random
random.shuffle(li)
print(li)
merge_sort(li, 0, len(li)-1)
print(li)
多种排序的小总结
![在这里插入图片描述](https://img-blog.csdnimg.cn/5d40ac0303a84062b8843123d09c2179.png)