📅  最后修改于: 2023-12-03 14:40:35.925000             🧑  作者: Mango
快速排序是一种高效的排序算法,它的时间复杂度为O(nlogn),比其他基于比较的排序算法(如冒泡排序和选择排序)更快。它的基本思想是通过将一个大的待排序序列分成两部分,分别排序,然后将它们合并在一起。
快速排序的核心是分治法。它的具体流程如下:
实现上可以采用两种方式:递归和迭代。
递归是一种直观的实现方式。代码如下:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
迭代是一种非递归的实现方式。代码如下:
def quick_sort(arr):
stack = [(0, len(arr) - 1)]
while stack:
start, end = stack.pop()
if start >= end:
continue
pivot = arr[start]
i = start
j = end
while i < j:
while i < j and arr[j] >= pivot:
j -= 1
arr[i] = arr[j]
while i < j and arr[i] < pivot:
i += 1
arr[j] = arr[i]
arr[i] = pivot
stack.append((start, i - 1))
stack.append((i + 1, end))
return arr
快速排序的时间复杂度为O(nlogn),最坏情况下为O(n^2)。当序列中的元素已经有序或者大部分元素都相同时,快速排序的效率会变得很低。
快速排序是一种不稳定的排序算法。如果在交换元素时不小心相同元素的顺序可能会发生改变。然而,快速排序的优势在于它在平均情况下比其他基于比较的排序算法都快。