📅  最后修改于: 2023-12-03 14:54:19.372000             🧑  作者: Mango
快速排序与归并排序均是常见的、高效的排序算法,效率取决于具体实现方式。本文将介绍两种排序算法的原理、优缺点、实现方式以及时间复杂度等。
快速排序采用了分治法(Divide and Conquer)的思想,将要排序的数组分成两个部分(sub-lists),其中一个部分的所有元素比另一部分的所有元素小,则可采用递归的方式将两个部分分别进行排序。
def quick_sort(array):
if len(array) < 2:
return array
else:
pivot = array[0]
less = [x for x in array[1:] if x <= pivot]
greater = [x for x in array[1:] if x > pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)
在平均情况下,快速排序的时间复杂度为O(nlogn),但最坏情况下时间复杂度为O(n^2)。
归并排序也是一种采用分治思想的排序算法。它的思路是将待排序的数组分成若干个子数组,每个子数组都是有序的,然后再将前面排好序的子数组合并成一个大的有序数组。
def merge_sort(array):
if len(array) < 2:
return array
else:
mid = len(array) // 2
left = merge_sort(array[:mid])
right = merge_sort(array[mid:])
return merge(left, right)
def merge(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
归并排序的时间复杂度为O(nlogn),是一种稳定的排序算法。