快速排序是一种分治的排序算法,其基本思想是通过一趟排序将待排序的元素分割成独立的两部分,其中一部分的所有元素都小于另一部分的所有元素,然后再对这两部分分别进行快速排序,最终将整个序列排序。

具体步骤如下:

  1. 选择一个基准元素pivot,可以选择第一个元素、最后一个元素、随机元素等。
  2. 设定两个指针i和j,分别指向序列的起始位置和末尾位置。
  3. 从j开始向前搜索,找到第一个小于pivot的元素,将其与arr[i]交换,然后i右移一位。
  4. 从i开始向后搜索,找到第一个大于pivot的元素,将其与arr[j]交换,然后j左移一位。
  5. 重复步骤3和步骤4,直到i和j相遇。
  6. 将pivot元素放到相遇的位置,此时pivot左边的元素都小于pivot,右边的元素都大于pivot。
  7. 递归地对pivot左边的子序列和右边的子序列进行快速排序。

下面是一个示例代码实现:

def quick_sort(arr, left, right):
    if left < right:
        pivot_index = partition(arr, left, right)
        quick_sort(arr, left, pivot_index - 1)
        quick_sort(arr, pivot_index + 1, right)

def partition(arr, left, right):
    pivot = arr[left]  # 选择第一个元素作为基准元素
    i = left
    j = right
    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
    return i

arr = [3, 1, 4, 2, 5]
quick_sort(arr, 0, len(arr) - 1)
print(arr)  # 输出 [1, 2, 3, 4, 5]

快速排序的平均时间复杂度为O(nlogn),最坏情况下为O(n^2)

对n个元素进行快速排序

原文地址: https://www.cveoy.top/t/topic/ifOl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录