📅  最后修改于: 2023-12-03 15:07:28.077000             🧑  作者: Mango
合并排序和快速排序都是常见的排序算法,它们的时间复杂度均为O(nlogn)。
合并排序是一种典型的分治型算法,它将待排序的数组划分成若干个子数组,分别进行排序后再将它们合并成一个完整的有序数组。
快速排序也是一种分治型算法,它选定一个基准元素,将待排序数组分为两部分,左边部分的元素都小于基准元素,右边部分的元素都大于基准元素,然后对左右两部分进行递归排序。
def merge_sort(nums):
if len(nums) <= 1:
return nums
mid = len(nums) // 2
left = merge_sort(nums[:mid])
right = merge_sort(nums[mid:])
return merge(left, right)
def merge(left, right):
res = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
res.append(left[i])
i += 1
else:
res.append(right[j])
j += 1
res += left[i:]
res += right[j:]
return res
merge_sort
函数通过递归将待排序数组划分成左右两部分,分别调用merge_sort
函数进行排序,然后将左右两部分进行合并,返回一个有序的数组。
merge
函数将左右两个有序数组合并成一个有序数组。
def quick_sort(nums):
if len(nums) <= 1:
return nums
pivot = nums[0]
left = [x for x in nums[1:] if x < pivot]
right = [x for x in nums[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
quick_sort
函数通过选定一个基准元素pivot
,将数组划分成左右两部分,将小于等于pivot
的元素放入左边,大于pivot
的元素放入右边,然后对左右两部分进行递归排序。
合并排序和快速排序都是基于分治思想的排序算法,它们的时间复杂度均为O(nlogn)。在实际应用中,快速排序一般比合并排序更快,但在某些特定情况下,合并排序可能会更优。