当前位置: 首页 > 知识库问答 >
问题:

随机快速排序最坏情况时间复杂度

全彬
2023-03-14
    null

共有1个答案

牛经赋
2023-03-14

如果输入包含所有相同的元素,则randomized quick-sort的运行时为O(n^2)。这是假设您使用与确定性版本相同的分区算法。分析结果是相同的。

下面是随机quicksort的一个实现,它计算执行的比较数:

import random

def quicksort(A, lo, hi):
    if lo >= hi:
        return 0
    p, compares = partition(A, lo, hi)
    compares += quicksort(A, lo, p - 1)
    compares += quicksort(A, p + 1, hi)
    return compares

def partition(A, lo, hi):
    r = random.randrange(lo, hi+1)
    A[r], A[hi] = A[hi], A[r]
    pivot = A[hi]
    i = lo - 1
    compares = 0
    for j in xrange(lo, hi):
        compares += 1
        if A[j] < pivot:
            i = i + 1
            A[i], A[j] = A[j], A[i]
    compares += 1
    if A[hi] < A[i + 1]:
        A[i + 1], A[hi] = A[hi], A[i + 1]
    return i + 1, compares


for x in xrange(10, 510, 40):
    compares = quicksort([1] * x, 0, x-1)
    print x, compares

输出清晰地显示了O(n^2)个运行时:

10 54
50 1274
90 4094
130 8514
170 14534
210 22154
250 31374
290 42194
330 54614
370 68634
410 84254
450 101474
490 120294
 类似资料:
  • 我想展示Quicksort空间复杂性的最坏情况。 我在想它,快速排序不使用辅助数组,它只是在分区子程序上创建一些辅助变量,但它只是操作数组中的项目。所以,很明显,我的结论是它使用了O(n)空间。 但我在网上搜索发现,Quicksort在最坏情况下的空间复杂度为O(logn)。 我只是不明白为什么在最坏的情况下,它比输入数组占用的空间更少? ps:我在看《算法导论》这本书。 我已经尝试的是计算算法中

  • 因为最坏情况下的快速排序复杂度为O(n^2) 在递增顺序的情况下,当pivot选择第一个或最后一个元素时,它给出了正确的最坏情况复杂度O(n^2),因为树的一个子元素总是空的 但是当枢轴选择中间时,我感到困惑?它将树分成两半,使其复杂性O(n.logn) 假设10 20 30 40 50 60 70枢轴=40 (10 20 30 ) 40 (50 60 70) 左侧枢轴20,右侧枢轴60 (10)

  • 我有一个关于计算时间复杂度的非常普遍的问题(大O符号)。当人们说QuickSort最差的时间复杂度是O(n^2)(每次都选择数组的第一个元素作为轴心,并且数组是反向排序的)时,他们考虑了哪个操作来获得O(n^2)?人们会计算if/else语句所做的比较吗?或者他们只计算其进行的互换的总数?一般来说,你如何知道计算大O符号需要计算哪些“步骤”。 我知道这是一个非常基本的问题,但我已经阅读了谷歌上几乎

  • 本文向大家介绍快速排序的最优情况?相关面试题,主要包含被问及快速排序的最优情况?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 快速排序的最优情况是Partition每次划分的都很均匀,当排序的元素为n个,则递归树的深度为。在第一次做Partition的时候需对所有元素扫描一遍,获得的枢纽元将所有元素一分为二,不断的划分下去直到排序结束,而在此情况下快速排序的最优时间复杂度为。

  • 我必须找到在c程序中输入最佳情况的快速排序的时间复杂度