数据结构与算法10-排序2

在这里插入图片描述

1.归并排序

在这里插入图片描述

def merge(nums1, nums2):
	res = []
    i = 0
    j = 0
    while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            res.append(nums1[i])
        else:
            res.append(nums2[j])
	res += nums1[i:]
	res += nums2[j:]
    return res
    
def merge_sort(lists):
    if len(lists) <= 1:
        return lists
    middle = len(lists)//2
    left = merge_sort(lists[:middle])
    right = merge_sort(lists[middle:])
    return merge(left, right)

在这里插入图片描述
将一段长文本分到最小格,需要logn,而小格排序则需要n,所以归并时间复杂度为nlogn。
在这里插入图片描述

2.快速排序

在这里插入图片描述

def quick_sort(arr):
    """快速排序"""
    if len(arr) < 2:
        return arr
    # 选取基准,随便选哪个都可以,选中间的便于理解
    mid = arr[0]
    # 定义基准值左右两个数列
    left, right = [], []
    # 从原始数组中移除基准值
    for item in arr[1:]:
        # 大于基准值放右边
        if item >= mid:
            right.append(item)
        else:
            # 小于基准值放左边
            left.append(item)
    # 使用迭代进行比较
    return quick_sort(left) + [mid] + quick_sort(right)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意快排的思想和实现方法的区别。

3.归并、快排对比

在这里插入图片描述

4.拓展- Top K 问题使用快排思路 O(n)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.小结

在这里插入图片描述

发布了71 篇原创文章 · 获赞 20 · 访问量 4845

猜你喜欢

转载自blog.csdn.net/qq_22795223/article/details/104827244