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)