📅  最后修改于: 2023-12-03 14:54:10.917000             🧑  作者: Mango
开膛手算法(也称为“快速排序”)是一种高效的排序算法,由英国计算机科学家Tony Hoare于1959年提出。它的目标是将一个待排序的数组分成两个子数组,其中一个子数组的所有元素小于另一个子数组的所有元素,并对这两个子数组进行递归排序。
快速排序是一种原地排序算法,它不需要额外的空间来存储临时数据。它的时间复杂度为平均情况下的O(nlogn),在最坏情况下为O(n^2)。
开膛手算法的基本思想是通过一趟排序将待排序的数组分割成独立的两部分,其中一部分的所有元素都小于另一部分的所有元素。具体过程如下:
def quick_sort(arr, low, high):
if low < high:
# 划分子数组
pivot_index = partition(arr, low, high)
# 递归排序左子数组
quick_sort(arr, low, pivot_index - 1)
# 递归排序右子数组
quick_sort(arr, pivot_index + 1, high)
def partition(arr, low, high):
# 选择基准元素
pivot = arr[low]
# 从后向前遍历数组
while low < high:
while low < high and arr[high] >= pivot:
high -= 1
# 将较小的元素放到左侧
arr[low] = arr[high]
while low < high and arr[low] <= pivot:
low += 1
# 将较大的元素放到右侧
arr[high] = arr[low]
# 将基准元素放到正确的位置
arr[low] = pivot
# 返回基准元素位置
return low
开膛手算法是一种高效的原地排序算法,通过将数组逐步划分为较小的子数组来实现排序。它的时间复杂度为O(nlogn),但在最坏情况下可能达到O(n^2)。由于它的实现较为简单,且性能优秀,快速排序被广泛应用于各种排序场景中。