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

快速排序时间复杂度最佳案例输入

萧星火
2023-03-14

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

共有1个答案

翟学文
2023-03-14

基本上你需要做一个划分

>

  • 通过递归调用自身来生成前半个分区

    通过递归调用自身来生成后半部分分区

    在后半部分分区之后插入透视值。

    需要注意的一点是,由于您只是生成输出而不是对任何东西进行排序,所以您实际上不必将任何值作为输入——您可以将范围逻辑地表示为数组中某个索引处的起始值和一个计数。

    下面是一些C#代码;这是未经测试的——如果你想自己做,不要看。

    static int[] GenerateBestCaseQuickSort(int n)
    {
        var ary = new int[n];
        GenerateBestCaseQuickSortAux(ary, 0, n, 1);
        return ary;
    }
    
    static void GenerateBestCaseQuickSortAux(int[] ary, int start_index, int count, int start_value)
    {
        if (count == 0)
            return;
    
        if (count == 1)
        {
            ary[start_index] = start_value;
            return;
        }
    
        int partition1_count = count / 2;
        int partition2_count = count - partition1_count - 1; // need to save a spot for the pivot so -1...
        int pivot_value_index = start_index + partition1_count;
        int pivot_value = start_value + partition1_count;
    
        GenerateBestCaseQuickSort(ary, start_index, partition1_count, start_value);
        GenerateBestCaseQuickSort(ary, pivot_value_index, partition2_count, pivot_value+1);
        ary[start_index + count - 1] = pivot_value;
    }
    

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

    • 我已经学习了递归快速排序,最佳情况需要O(nlogn),最坏情况需要O(n^2)。但我试图找到迭代快速排序的时间复杂度。我知道最好的情况是O(nlogn)和O(n^2)。但我不会为最好的情况辩护。我正在学习本教程 https://www.techiedelight.com/iterative-implementation-of-quicksort/ 假设我们有15个元素,使枢轴索引位置始终处于中间

    • 为什么选择排序的最佳案例时间复杂度为O(n^2),而插入排序和冒泡排序为O(n)?他们的平均时间是一样的。我不明白为什么最佳案例时间不同。如果你能帮忙,我将不胜感激。

    • 问题: 我必须分析时间复杂度来对几乎已排序的整数值列表进行排序(使用快速排序)。 我做了什么? 我读过SO Q1、SO Q2、SO Q3和这一本。 但是,我没有发现任何明确提到使用快速排序对k排序数组进行排序的时间复杂度的内容。 由于快速排序算法的时间复杂度取决于选择数据透视的策略,并且由于几乎排序了数据,因此有可能面临最坏情况,为了避免最坏情况,我使用了三个值(第一、中间、最后)的中位数作为这里

    • 我想展示Quicksort空间复杂性的最坏情况。 我在想它,快速排序不使用辅助数组,它只是在分区子程序上创建一些辅助变量,但它只是操作数组中的项目。所以,很明显,我的结论是它使用了O(n)空间。 但我在网上搜索发现,Quicksort在最坏情况下的空间复杂度为O(logn)。 我只是不明白为什么在最坏的情况下,它比输入数组占用的空间更少? ps:我在看《算法导论》这本书。 我已经尝试的是计算算法中